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 做个浏览器,在默认配置下尝试对程序进行编译,在没有语法错误的情况下,出现了报错。
解决方法
sudo ln -sf /usr/bin/x86_64-linux-gnu-ld.gold /usr/bin/ld
’xxx’ file not found
报错信息
In included file: 'QMainWindow' file not foundIn included file: 'mainwindow' file not found
报错原因
QT 项目中包含有中文路径。