我有一个工作信号槽机制,供用户检查和取消选中复选框。
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
函数。
我不知道怎么做?当我试图将它添加到插槽时,它会抛出错误。
答案 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()
的更清晰的选择。文档非常详尽。