如何通过某些参数调用函数?

时间:2012-02-22 23:16:47

标签: c++ qt

我希望得到一个信号来调用具有某些参数的函数,如下例所示。


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

我如何做到这一点?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

效率似乎非常低,但您可以使用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) {

答案 2 :(得分:0)

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