0

我有一个工作信号槽机制供用户检查和取消选中复选框。

QWidget *w = new QWidget(this);
w->setFixedSize(300,200);
QVBoxLayout *vbox = new QVBoxLayout;

foreach(QString filt, filters){
    QCheckBox *checkbox = new QCheckBox(filt, this);
    checkbox->setChecked(true);
    vbox->addWidget(checkbox);

    connect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(cbstate(int)));

}

w->setLayout(vbox);
w->show();

void MainWindow::cbstate(int state){
    if(state == 0){
        //unchecked
        QMessageBox::information(this, "blah", "You have unchecked this box");
    }
    else if (state == 2){
        //checked
        QMessageBox::information(this, "blah", "You have checked this box");
    }
}

我的问题的解释很简单,我需要将 传递QString filtcbstate函数。

我不知道该怎么做?当我尝试将其添加到插槽时,它会引发错误。

4

2 回答 2

2

cbstate插槽中,您可以filt使用QObject::sender(). 它将返回指向checkbox. 你可以从中得到filt

void MainWindow::cbstate(int state){
    QChecBox* checkBox = qobject_cast<QCheckBox*>(sender());
    QString filt = checkBox->text();
    ...
}
于 2013-08-06T11:25:38.717 回答
1

您还可以使用 Qt 的QSignalMapper类,在我看来,这将是使用QObject::sender(). 文档非常详尽。

于 2013-08-06T12:26:17.717 回答