QObject :: connect:找不到信号

时间:2016-06-03 16:40:00

标签: c++ qt5

我有一个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调用。在我的情况下,这个消息意味着什么,我在哪里做错了?

1 个答案:

答案 0 :(得分:3)

正如drescherjm和Learner所提到的,你忘记在头文件中添加signals:部分,并在其中声明你的信号。

Qt在运行时而不是在编译时将信号连接到插槽,因此在程序实际运行之前无法检测到错误连接的信号和插槽;这就是为什么会报告这个问题的原因。

Qt使用 moc 预处理器将signalsslots转换为标准c ++,这就是为什么你的signals:slots:部分了标题在编译时不会引起问题。

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

修改 您似乎正在尝试使用具有其中一个类函数名称的信号。我认为这不会起作用。 the documentation for the new signal/slot syntax表示您可以连接 TO 任何内容,它不一定是插槽,但我相信您仍然需要将信号定义为信号