在插槽中传递QString

时间:2013-08-06 11:14:45

标签: c++ qt

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

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 filt传递给cbstate函数。

我不知道怎么做?当我试图将它添加到插槽时,它会抛出错误。

2 个答案:

答案 0 :(得分:2)

cbstate广告位中,您可以使用filt获取QObject::sender()。它将返回指向checkbox的指针。您可以从中获取filt

void MainWindow::cbstate(int state){
    QChecBox* checkBox = qobject_cast<QCheckBox*>(sender());
    QString filt = checkBox->text();
    ...
}

答案 1 :(得分:1)

你也可以使用Qt的QSignalMapper课程,我认为这是使用QObject::sender()的更清晰的选择。文档非常详尽。