我试图将信号QListWidget->itemChanged
连接到名为checkItemChanged
的自定义插槽。我在this question中要求正确的语法。
我使用QT4所以我使用如下的旧字符串语法来连接信号和插槽:
connect(listWidget, SIGNAL(itemChanged(QListWidgetItem*)), this , SLOT(checkItemChanged(QListWidgetItem*)));
此连接语法在名为mainWindow.cpp
的文件中声明,其头文件mainWindow.h
如下所示:
class mainWindow : public QWidget
{
Q_OBJECT
public:
mainWindow ( QWidget *parent=0, const char *name=0 );
public slots:
void checkItemChanged(QListWidgetItem*);
我还在mainWindow.cpp
中定义了我的插槽实现,如下所示:
void mainWindow::checkItemChanged(QListWidgetItem* item)
{
if (item->checkState()==true){
qDebug()<<"Item: "<<item->text()<<"Checked";
}else{
qDebug()<<"Item: "<<item->text()<<"UnChecked";
}
}
所以它使用宏Q_OBJECT作为answered here作为no such slot
错误的常见原因。
我在 KDevelop IDE 中运行我的项目,因此它将自动生成.moc
文件并按this answer中的要求运行qmake
但是我仍然面临如下错误:
Object::connect: No such slot mainWindow::checkItemChanged(QListWidgetItem*) in /home/part/Desktop/project/P/src/gui/mainWindow.cpp:320
我知道这很奇怪,但我想知道它可能与QListWidget->itemChanged
受到保护的事实有关吗?或者还有一些我错过的东西?