Qt6遇到的问题

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

1. 下载官方安装包:

qt6下载地址

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库文件到当前工程。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值