我有一个MainWindow
类,它在mainwindow.h
中声明并在mainwindow.cpp
中分别定义如下:
在mainwindow.h中:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
...
void addNewTab(QString fullFilePath, QString textString="");
public slots:
void disableMenuItem();
...
private:
...
};
在mainwindow.cpp中:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
...
connect(this, &MainWindow::addNewTab, this, &MainWindow::disableMenuItem);
...
}
void MainWindow::addNewTab(QString fullFilePath, QString textString)
{
...
}
void MainWindow::disableMenuItem()
{
...
}
除了控制台上的以下消息外,所有内容都编译并运行正常:
QObject::connect: signal not found in MainWindow
该消息来自上面构造函数中的connect
调用。在我的情况下,这个消息意味着什么,我在哪里做错了?
答案 0 :(得分:3)
正如drescherjm和Learner所提到的,你忘记在头文件中添加signals:
部分,并在其中声明你的信号。
Qt在运行时而不是在编译时将信号连接到插槽,因此在程序实际运行之前无法检测到错误连接的信号和插槽;这就是为什么会报告这个问题的原因。
Qt使用 moc 预处理器将signals
和slots
转换为标准c ++,这就是为什么你的signals:
和slots:
部分了标题在编译时不会引起问题。
信号完全由moc定义,因此您不需要在.cpp文件中定义它们,但它们仍然需要在标题中,因此moc知道创建它们。
修改强> 您似乎正在尝试使用具有其中一个类函数名称的信号。我认为这不会起作用。 the documentation for the new signal/slot syntax表示您可以连接 TO 任何内容,它不一定是插槽,但我相信您仍然需要将信号定义为信号