如何获得调用具有特定参数的函数的信号

How do I get a signal to call a function with certain arguments?

本文关键字:参数 函数 信号 何获得 调用      更新时间:2023-10-16

我想得到一个信号来调用带有特定参数的函数,就像下面的例子一样。


QPushButton *yes = new QPushButton("Yes");
yes->connect(yes, SIGNAL(clicked()), NULL, SLOT(printf("You pressed a button")));

我该如何做到这一点?

一种经常被忽视的反转信号/插槽关系的方法是QObject::sender。您可以在接收槽中调用它以获取QPushButton的句柄(使用qobject_cast)并从中获取文本。或者,您可以使用QSignalMapper来增强信号。

这看起来效率很低,但您可以使用QString参数创建一个新信号,并将其连接到按钮。包含的文本将在您的发射调用中定义。

例如。

connect(yes, SIGNAL(clicked()), this, SLOT(emitHelloWorldText());
connect(this, SIGNAL(emitText(QString)), receiver, SLOT(dostuffWithText(QString)));

那么你的emitHelloWorldText方法可以是类似的方法

void emitHelloWorldText() {
    emit emitText("Hello world");
}

然后这可以被你的接收器类拾取

void doStuffWithText(const QString &text) {

不幸的是,插槽和信号必须具有匹配的参数。如果你真的需要使用这个接口,你可以创建一个中间插槽来传播接收到的信号,但没有真正的方法。