QObject::connect:未找到信号
QObject::connect: signal not found
我有一个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知道如何创建它们。
编辑:您似乎正在尝试使用一个具有类函数名称的信号。我认为这行不通。新信号/插槽语法的文档表明,您可以将连接到任何东西,它不一定是插槽,但我认为您仍然需要将信号定义为信号。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 当我使用Connect信号和插槽时,会出现此分解错误
- 可以在 QObject::connect() C++中连接 QML 对象现有信号?
- Qt connect(*发送器,*信号,*接收器,*方法)不调用插槽
- QObject::connect:未找到信号
- connect() 似乎用错误的命名空间作为信号的前缀
- Q对象::connect:没有这样的信号(类名)(signalname)(atribure)
- QObject::connect:没有这样的信号progressbarV::keyReleaseEvent()
- QObject::connect:在 c++ Qt 5.3 中连接 qml 信号时没有这样的信号
- QObject::connect:没有这样的信号mouseReleaseEvent
- 使用QObject::connect()时,类型签名是否重要,用于将函数连接到信号
- QObject::connect:无此信号