我希望得到一个信号来调用具有某些参数的函数,如下例所示。
QPushButton *yes = new QPushButton("Yes");
yes->connect(yes, SIGNAL(clicked()), NULL, SLOT(printf("You pressed a button")));
我如何做到这一点?
答案 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)
不幸的是,插槽和信号必须具有匹配的参数。如果你真的需要坚持使用这个接口,你可以创建一个中间插槽来传播接收到的信号,但是没有真正的方法。