我有一个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);
}

10-04 12:56