一、安装Qt6(在线安装)或者想要下载、更新软件包时速度很慢
1. 下载官方安装包:

2. 解压压缩包,放在C盘根目录下 (放在其他目录也可,输入cmd命令时自己匹配路径即可)并打开windows Powershell,输入命令:
进入c根目录:
cd /
输入以下命令:
.\qt-unified-windows-x64-4.5.2-online.exe --mirror https://mirror.nju.edu.cn/qt
其中 qt-unified-windows-x64-4.5.2-online.exe 是下载的安装包的名称,根据自己的安装包进行修改。
输入并回车后将会自动打开安装程序,并接连到国内镜像网站,可快速下载、更新安装各种包。
二、使用其他的包(xxx"file not found)
使用Qt6时明明安装的有相应的包,可就是提示"xxx"file not found”

确定该包是下载过的:

对应目录也有:

为什么找不到文件呢,其实是cmake没有配置好,需要手动在CMakeLists.txt中加入红色方框中部分。


按照箭头提示,加入想要使用的文件即可,并不仅限于SerialPort。
也可以在帮助中搜索类名,将CMake后的部分复制到CMakeLists.txt中(注意替换工程名)。

三、No matching signal for on_btn_clicked()
Qt Creator提示:
QMetaObject::connectSlotsByName: No matching signal for on_btn_clicked()。
除非可视化向导界面创建槽,否则自己定义的槽不要使用on_xxx_clicked()这种形式。
四、error: ‘ui_mainwindow.h‘ file not found
说明:更换电脑后,Qt提示以上问题,应该是路径的问题,网上百度说什么重新构建等方法都没有解决,但最终找到了以下解决方法。
ui_mainwindow.h是自动生成的,那么让他自动生成一下不就好了。
1. 把项目自动生成的“build-xxxx-Debug”文件夹删除掉。
2. 重新打开工程,然后运行(此时会自动构建并生成已删除掉的文件夹),发现这时已能够运行起来了。
3.虽然运成功,但红色报警提示并没有消除,再次重新打开后报警完全消失。
五、QBasicTimer::start: Timers cannot be started from another thread
说明:本人并没有使用QTimer相关的类,然而提示了这个问题。
分析:在下边的构造函数中,创建了m_modbusClient,应该是QModbusRtuSerialClien类中使用了Qtimer类或相关类。问题就在这里,构造函数是在主线程中执行的,而
m_modbusClient = new QModbusRtuSerialClient(this);
调用QModbusRtuSerialClient构造函数,会使用传过来this指针作为父对象,也就是把SerialPort类当作父类,而我需要把SerialPort类放到了次线程中运行,即在主线程中创建的对象,要把次线程中的类当作父对象,这是不被QObject规则所允许的,也就是跨线程操作了。
SerialPort::SerialPort(QObject *parent)
: QObject{parent}
{
...
m_thread = new QThread();
m_modbusClient = new QModbusRtuSerialClient(this);
this->moveToThread(m_thread);
...
}
那么不要m_modbusClient = new QModbusRtuSerialClient(this);放在构造函数就行了。解决方法也有很多。本人的此项目使用的是信号与槽的方式,线程启动后再去创建m_modbusClient就能保证是在次线程中操作的了。但是使用QThread::started也有一定缺点,受限于started信号操作和执行时机,不太好支持太复杂的重新连接等功能。
connect(m_thread,&QThread::started,this,&SerialPort::slot_startModbus);
void SerialPort::slot_startModbus()
{
m_modbusClient = new QModbusRtuSerialClient(this);
}
六、cmakelist.txt导入外部动态库.dll
1.如下图,本人的msys-usb-1.0.dll的库文件以及头文件路径如下。
2.在工程中导入libusb.h头文件。
3. 引入库文件到工程。
set(libusb ${CMAKE_SOURCE_DIR}/libs/libusb-MinGW-x64/bin/msys-usb-1.0.dll)
target_link_libraries(IAP PRIVATE ${libusb})
set 是为了把路径保存为libusb,方便后面使用。target_link_libraries表示添加第三方lib库文件到当前工程。