我有一个QPushButton,当我单击按钮时,我将调用一个带有两个参数的方法,在此示例中:exampleMethod(int i, double d)
。
现在,将QPushButton button
中的click事件连接到exampleMethod,如下所示:connect(button, &QPushButton::clicked,this, &Example::exampleMethod);
但这不起作用,因为clicked()
和exampleMethod(int, double)
的参数不兼容。
现在,我创建了一个额外的信号:exampleSignal(int i, double d)
以连接到我的插槽:connect(this, &Example::exampleSignal, this, &Example::exampleMethod);
还有一个没有参数的插槽:从QPushButton clicked()调用它的exampleMethodToCallFromButtonClick()
,我在其中调用信号:
Example::Example(QWidget *parent) : QWidget(parent){
button = new QPushButton("Click", this);
connect(button, &QPushButton::clicked,this, &Example::exampleMethodToCallFromButtonClick);
connect(this, &Example::exampleSignal, this, &Example::exampleMethod);
}
void Example::exampleMethod(int i, double d){
qDebug() << "ExampleMethod: " << i << " / " << d;
}
void Example::exampleMethodToCallFromButtonClick(){
emit exampleSignal(5,3.6);
}
这很好。
1)现在我的第一个问题是:这真的是不使用lambda 来执行的最佳方法吗?
使用lambda时看起来更好,并且我不需要两个connect语句:
connect(button, &QPushButton::clicked, [this]{exampleMethod(5, 3.6);});
2)我的第二个问题:lant的还是,这是最好的方法,还是有更好的解决方法?
我还考虑过将
exampleMethod
中的参数保存为成员变量,不带参数调用该方法,而不是使用参数获取成员变量,但是我认为这不是一个好方法。谢谢你的帮助!
最佳答案
这些东西我都不会做。接收信号,收集您的参数,然后调用exampleMethod
。当在连接点知道参数时,lambda更合适。
Example::Example(QWidget *parent) : QWidget(parent){
button = new QPushButton("Click", this);
connect(button, &QPushButton::clicked, this, &Example::onButtonClicked);
}
void Example::exampleMethod(int i, double d){
qDebug() << "ExampleMethod: " << i << " / " << d;
}
void Example::onButtonClicked(){
int i = ...;
double d = ...;
exampleMethod(i, d);
}