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,放到工程根目录,如下图:

    1

  • 第二步,在pro文件中,加入新的一行,内容为 ICON = app.icns,其中app.icns为你的图标文件名。

    2

  • 第三步,选择release,编译即可生成APP,app效果如下:

    3

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/
    

qt

1551 字

2016-12-23 13:23 +0000