试图从复选框更改中获取信号

时间:2013-08-06 10:26:49

标签: c++ qt checkbox

以下代码设置了一个复选框列表。

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'中声明的成员函数

有什么想法吗?我正确地谈到这个吗?感谢。

2 个答案:

答案 0 :(得分:2)

肯定听起来好像没有正确地将方法cbstate添加到头文件中。如果您从头文件中复制并粘贴它,那么您就会输入错误信息:

void cbsate(int state);

应该是:

void cbstate(int state);

答案 1 :(得分:1)

解决连接问题:

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

请注意,使用了 stateChanged ,而不是 statechanged