482 字
2 分钟
Qt 报错
2022-02-22

QMetaObject::connectSlotsByName#

报错信息#

QMetaObject::connectSlotsByName: No matching signal for on_signal_mainSerialThread_NewInfo(QString)

报错原因#

这里我尝试新建了一个 QThread 线程,并将类中的信号 NewInfo 与 槽函数 on_signal_mainSerialThread_NewInfo 进行了关联。

this->mainSerialThread = new SerialThread(this);
this->mainSerialThread->setSerialDevice(this->mainSerialDevice);
connect(this->mainSerialThread, &SerialThread::NewInfo, this, &MainWindow::on_signal_mainSerialThread_NewInfo);

完成关联后,我尝试编译测试相关功能,然后就出现了报错。

报错的详细原因如下:

用IDE里的QtEditer可以自动调用Qt中“connectSlotsByName”即“按空间名称关联槽”的方式进行关联,对应的函数必须写成“on_控件名_信号名”的格式;或者也可以通过connet函数人为显式地将信号和槽关联起来。但是,如果采用显式 connect的方法的同时,又将槽函数的名字起成了“on_控件名_信号名”的格式,那么就会在运行时弹“QMetaObject::connectSlotsByName: No matching signal for”的警告了!1

简单来说就是 QtCreator 会自动关联已有信号和槽函数(格式为:on_控件名_信号名)。

我这里由于使用了 on_xxxx 的格式,它编译的时候按这个槽函数去找信号,并没有发现,于是产生了该报错。

解决方法#

connect(this->mainSerialThread, &SerialThread::NewInfo, this, &MainWindow::signal_mainSerialThread_NewInfo);

解决方法也很简单,函数名的开头只要不是 “on_” 就可以了

libQt5WebEngineCore.so#

报错信息#

… libQt5WebEngineCore.so: .dynsym local symbol at index 2 libQt5WebEngineCore.so: .dynsym local symbol at index 3 libQt5WebEngineCore.so: .dynsym local symbol at index 4 …

报错原因#

参考2

这里我尝试使用 QWebEngineView 做个浏览器,在默认配置下尝试对程序进行编译,在没有语法错误的情况下,出现了报错。

解决方法#

Terminal window
sudo ln -sf /usr/bin/x86_64-linux-gnu-ld.gold /usr/bin/ld

’xxx’ file not found#

报错信息#

Terminal window
In included file: 'QMainWindow' file not found
In included file: 'mainwindow' file not found

报错原因#

QT 项目中包含有中文路径。

Footnotes#

  1. 编程过程出现 QMetaObject::connectSlotsByName: No matching signal for 问题分析以及解决过程方法

  2. Linux下使用Qt的一些问题及解决方法

Qt 报错
https://fuwari.vercel.app/posts/编程/qt/qt-报错/
作者
Asuwee
发布于
2022-02-22
许可协议
CC BY-NC-SA 4.0