以下代码设置了一个复选框列表。
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(this, SIGNAL(statechanged(int)), this, SLOT(cbstate(int)));
}
w->setLayout(vbox);
w->show();
这个想法是当用户检查或取消选中某个项目时,它会发出一个信号。
在头文件中,我在私有插槽中包含以下内容:
void cbsate(int state);
在cpp文件中,我已声明:
void MainWindow::cbstate(int state){
if(state == 0){
//unchecked
QMessageBox::information(this, "Unchecked", "You have unchecked this box");
}
else if (state == 2){
//checked
QMessageBox::information(this, "Checked", "You have checked this box");
}
}
我现在收到错误
no'void MainWindow :: cbstate(int)'在类'MainWindow'中声明的成员函数
有什么想法吗?我正确地谈到这个吗?感谢。
答案 0 :(得分:2)
肯定听起来好像没有正确地将方法cbstate添加到头文件中。如果您从头文件中复制并粘贴它,那么您就会输入错误信息:
void cbsate(int state);
应该是:
void cbstate(int state);
答案 1 :(得分:1)
解决连接问题:
connect(this, SIGNAL(stateChanged(int)), this, SLOT(cbstate(int)));
请注意,使用了 stateChanged ,而不是 statechanged 。