QObject::connect:未找到信号

QObject::connect: signal not found

本文关键字:信号 connect QObject      更新时间:2023-10-16

我有一个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预处理器将signalsslots转换为标准c++,这就是为什么在编译时头的signals:slots:部分不会引起问题的原因。

信号完全由moc定义,因此您不需要在.cpp文件中定义它们,但它们仍然需要在标头中,以便moc知道如何创建它们。

编辑:您似乎正在尝试使用一个具有类函数名称的信号。我认为这行不通。新信号/插槽语法的文档表明,您可以将连接到任何东西,它不一定是插槽,但我认为您仍然需要将信号定义为信号。