我有一个MainWindow
类,它在mainwindow.h
中声明,在mainwindow.cpp
中定义如下:
在主窗口.h:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
...
void addNewTab(QString fullFilePath, QString textString="");
public slots:
void disableMenuItem();
...
private:
...
};
在主窗口.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
调用。这条信息对我来说意味着什么?我做错了什么?
正如drescherjm和Learner所提到的,您忘记在头文件中添加signals:
部分,并在其中声明您的信号。
Qt在运行时将信号连接到插槽,而不是在编译时,因此在程序实际运行之前,无法检测到错误连接的信号和插槽;这就是为什么这个问题被报道的原因。
Qt使用moc预处理器将signals
和slots
转换为标准c++,这就是为什么在编译时头的signals:
和slots:
部分不会引起问题的原因。
信号完全由moc定义,因此您不需要在.cpp文件中定义它们,但它们仍然需要在标头中,以便moc知道如何创建它们。
编辑:您似乎正在尝试使用一个具有类函数名称的信号。我认为这行不通。新信号/插槽语法的文档表明,您可以将连接到任何东西,它不一定是插槽,但我认为您仍然需要将信号定义为信号。