Qt开发学习问题解决笔记
本文主要用来整理学习Qt开发过程中遇到的问题及解决办法,会持续更新。
更新表:
日期 | 更新内容 |
---|---|
2016-02-27 | QtSerialport库使用时编译错误 |
… | macOS下程序图标设置问题 |
Linux下Qt的can't find lGL问题 |
|
Linux下无法启动Qt帮助问题 | |
2016-12-27 | Linux下Qt添加中文Fctix输入法支持 |
QtSerialport库编译错误
现象
QtSerialport使用时,虽然包含了头文件,但仍然会爆出错误,linux和macOS下都会这样。
linux下
QtSerialport库编译错误undefined reference
编译错误提示类似如下:
C:\Users\smslit\Documents\workspace\Qt\build-teatSerial-Desktop_Qt_5_5_0_MinGW_32bit-Debug/../teatSerial/mainwindow.cpp:
24: undefined reference to ` _imp___ZN11QSerialPort11setPortNameERK7QString'
C:\Users\smslit\Documents\workspace\Qt\build-teatSerial-Desktop_Qt_5_5_0_MinGW_32bit-Debug/../teatSerial/mainwindow.cpp:
25: undefined reference to ` _imp___ZN11QSerialPort9setParityENS_6ParityE'
C:\Users\smslit\Documents\workspace\Qt\build-teatSerial-Desktop_Qt_5_5_0_MinGW_32bit-Debug/../teatSerial/mainwindow.cpp:
26: undefined reference to ` _imp___ZN11QSerialPort11setDataBitsENS_8DataBitsE'
C:\Users\smslit\Documents\workspace\Qt\build-teatSerial-Desktop_Qt_5_5_0_MinGW_32bit-Debug/../teatSerial/mainwindow.cpp:
27: undefined reference to ` _imp___ZN11QSerialPort11setStopBitsENS_8StopBitsE'
C:\Users\smslit\Documents\workspace\Qt\build-teatSerial-Desktop_Qt_5_5_0_MinGW_32bit-Debug/../teatSerial/mainwindow.cpp:
28: undefined reference to ` _imp___ZN11QSerialPort17setReadBufferSizeEx'
C:\Users\smslit\Documents\workspace\Qt\build-teatSerial-Desktop_Qt_5_5_0_MinGW_32bit-Debug/../teatSerial/mainwindow.cpp:
29: undefined reference to ` _imp___ZN11QSerialPort14setFlowControlENS_11FlowControlE'
macOS下
编译会有类似提示如下:
Undefined symbols for architecture x86_64:
"QSerialPort::setBaudRate(int, QFlags<QSerialPort::Direction>)", referenced from:
MainWindow::on_openPortButton_clicked() in mainwindow.o
"QSerialPort::setDataBits(QSerialPort::DataBits)", referenced from:
MainWindow::on_openPortButton_clicked() in mainwindow.o
.
.
.
"QSerialPortInfo::portName() const", referenced from:
MainWindow::fillPortsInfo() in mainwindow.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决办法
在工程的pro文件中的第一行加入以下内容,再次编译即可通过:
QT += serialport
Mac OSX下QT设置程序的图标
-
第一步,设计好自己想要的icns图标,比如图标命名时app.icns,放到工程根目录,如下图:
-
第二步,在pro文件中,加入新的一行,内容为 ICON = app.icns,其中app.icns为你的图标文件名。
-
第三步,选择release,编译即可生成APP,app效果如下:
cannot find -lGL
Ubuntu下Qt编译错误:cannot find -lGL
在编译之前常见的一个小工程(在mac下创建的)的时候,出现lGL错误,我以为是不兼容,但又新建了一个项目,编译出错:
cannot find -lGL。
经过了解是因为缺少文件导致,需要安装部分文件,网上找到的解决方案是:安装libqt4-dev
或者libgl1-mesa-dev
或者libgl1-mesa-dev
或者libglu1-mesa-dev
我只尝试了安装libqt4-dev
,在Teminal中执行一下命令安装相关库文件,然后编译就成功了。
sudo apt-get isntall libqt4-dev
无法启动help插件
Ubuntu下qtceator后无法启动help插件
安装好qt5.5后启动qtceator时提示:
/opt/Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库/opt/Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so:(libgstapp-0.10.so.0: 无法打开共享对象文件: 没有那个文件或目录)
一定时缺少库造成的,可能是因为Qt帮助是采用流媒体的方式加载,尝试安装流媒体库文件,来解决,如下来安装:
sudo apt-get install libgstreamer0.10-dev
sudo apt-get install libgstreamer-plugins-base0.10-dev
Linux下添加Qt的中文输入支持
现象
在linux下用Qt在写一个小工具,想在使用过程中输入中文,发现怎么也不行,后来发现Qt编译后的程序也不支持中文输入,最终定位原因在未安装fctix输入法的支持,我的输入法是搜狗,其基于fctix,所以不支持,只需安装相应库并放倒两个目录下解决。
解决方法
-
首先得安装fcitx-libs-qt和fcitx-libs-qt5这两个库:
sudo apt-get install fcitx-libs-qt fcitx-libs-qt5
-
在
/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/
目录下找到libfcitxplatforminputcontextplugin.so
,将其拷贝到随便一个目录,比如Downloads,然后加运行权限:cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so ~/Downloads cd ~/Downloads chmod +x libfcitxplatforminputcontextplugin.so
-
然后将这个库文件分别放到两个目录下,下面命令中
QT安装目录
替换为QT的安装目录,比如我的/opt/Qt5.7/
:# 解决Qt中不能输入中文的问题 cp libfcitxplatforminputcontextplugin.so QT安装目录/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/ # 解决Qt编译出的程序不支持中文输入的问题 cp libfcitxplatforminputcontextplugin.so QT安装目录/5.7/gcc_64/plugins/platforminputcontexts/