Qt 应用编程(一)

目录

目录

1. Qt退出应用程序

2. Qt源码编译的各种设置

3. Qt程序移植到Linux(Buildroot文件系统)上后的环境变量配置(Tslib)

4. Qt程序移植到Linux上后的环境变量配置(不用Tslib)


1. Qt退出应用程序

严格来讲,this->close() 只能让widget退出。要让应用完全退出可以采取以下办法:

QApplication* app;
app->quit();
// or app->exit(0);
QApplication::instance()->quit();
qApp->quit();

qApp是一个宏,指向的就是 static_cast<QApplication *>(QCoreApplication::instance()) 。详情请查看Qt源码。


2. Qt源码编译的各种设置

我们下载 qt-everywhere-src-5.15.2.tar.xz 解压并进入根目录。

其实只要运行:

./configure xxx

make

make install

就可以生成编译好的Qt包了,其中包含qmake,各种.so动态库 等等。

举例讲,一个设置的脚本:

#!/bin/sh

./configure -prefix $(pwd)/arm_qt \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qtdoc \
-skip qtpurchasing \
-skip qtlocation \
-make libs \
-make examples \
-nomake tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
-evdev \
-no-feature-tslib \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-recheck-all

比较重要的几个设置选项:

  • -prefix  编译好生成的输出路径
  • -xplatform  选用哪个qt-mkspecs的qmake.conf。具体位置在 qt-everywhere-src-5.15.2 /qtbase/mkspecs/ 目录下
  • -c++std  选用哪个C++版本来编译
  • -skip  选择哪个Qt的模块
  • -no-feature-xxx  选择哪个第三方模块库

由此,我们就可以配置我们要输出的Qt模组包含哪些功能。


3. Qt程序移植到Linux(Buildroot文件系统)上后的环境变量配置(Tslib)

环境变量对操作系统来说,好比房间钥匙,不然打不开房门,用不了可执行文件动态库头文件。。。比如说在windows上装好了JDK,肯定要在“系统环境变量”里加上JDK的bin路径,不然eclipse都打不开。

同理,要想在ARM板子上运行Qt触摸屏程序,必须在板子上的Linux里声明许多必要的全局变量:

不妨全写在一个 qt-imx6ull.sh 文件里,在从/etc/profile里调用(source *.sh)

#!/bin/sh

export TSLIB_CONSOLEDEVICE=none        #终端控制台不需要
export TSLIB_FBDEVICE=/dev/fb0        #根据LCD屏幕对应的设备节点设置

export TSLIB_TSDEVICE=/dev/input/event1  #根据实际情况更改,接入触摸屏后,生成的event设备节点
export TSLIB_CONFFILE=/etc/ts.conf        #tslib的配置文件,一般情况下不需要更改
export TSLIB_PLUGINDIR=/usr/lib/ts         #插件的目录,存放着input.so
export TSLIB_CALIBFILE=/etc/pointercal    #校准后生成的校验文件
export LD_LIBRARY_PATH=/lib:/usr/lib        #添加共享库的目录
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export QWS_MOUSE_PROTO=tslib:/dev/input/event1     #QT输入设备的环境变量

export QT_QPA_PLATFORM_PLUGING_PATH=/usr/lib/qt/plugins    # platforms/*.so 各个platform动 
                                                           # 态库的保存位置
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0    #Qt用哪个platform运行,这个在buildroot配置页面                
                                               #里有提示,这里使用linuxfb
export QT_QPA_GENERIC_PLUGINS=tslib:$TSLIB_TSDEVICE  # Qt使用的插件类型
export QT_QPA_FONTDIR=/usr/share/fonts/cantarell  #Qt调用的字体库,在buildroot配置页面要勾选才能生成
export QT_QPA_FB_TSLIB=1                       # 很重要!使能Qt(linuxfb平台)调用tslib控件

首先是TSLIB系统,它们声明的是tslib触屏控件的一些路径和对象。路径的设置必须根据实际情况,打开buildroot生成的文件系统,重点看看/usr/lib, /dev下面,有没有想要的东西。配置好以后,直接运行 ts_calibrate 或者 ts_test ,看看能不能运行即可。

而后是QT_QPA系列环境变量,它们直接决定qt程序能不能在目标平台上正常启动。打开buildroot生成的文件系统,重点看看/usr/lib, /usr/share下面,有没有想要的东西。这里的QT_QPA_FB_TSLIB不声明的话,触摸屏点击qt程序没反应。是联系tslib和Qt的桥梁。

总之,可以通过输入env,看看有没有正确设置该有的全局变量。

参考:tslib库移植错误解决_努力的码农的博客-CSDN博客

编译根文件系统遇到的问题 - 知乎

IMX6学习记录(28)-使用Buildroot构建QT_Jun626的博客-CSDN博客_buildroot qt

Couldnt load module input, no modules loaded_deshang7096的博客-CSDN博客


4. Qt程序移植到Linux上后的环境变量配置(不用Tslib)

参考:20200620-01 Qt5.14.2 交叉编译触摸输入 Tslib1.14 / evdev 等方式详细说明_迪加不会飞的博客-CSDN博客

其实把Qt程序移植到电容屏的板子上,就不一定需要Tslib了,因为不需要校准。

对于 Qt 而言,它支持 tslib 单点输入,tslib 是一个第三方库,对电阻屏这类低精度屏而言表现较为优秀;而 evdev 则是 Qt 自带输入库,支持多点输入,但是对于电阻这类需要校准的屏幕效果不好,适合电容这类屏幕。

我们在编译qt源码时,可以加入这样的设置:

./configure -evdev

不过evdev 一般都是默认添加到编译之中的。

qt-imx6ull.sh 文件可以这样:

#!/bin/sh
# No tslib
export QT_LOGGING_RULES=qt.qpa.input=false
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0
export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event0
export QT_QPA_FB_HIDECURSOR=1        #隐藏鼠标光标
export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event0  # 输入插件 evdevtouch

export QT_ROOT=/usr/local/lib/pilot_qt
export QT_QPA_FONTDIR=/usr/share/fonts/cantarell
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=$QT_ROOT/plugins

export LD_LIBRARY_PATH=$QT_ROOT/lib:/usr/lib:$LD_LIBRARY_PATH

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值