linux嵌入式qt的屏幕旋转与字体大小问题

zhuanzi :http://blog.sina.com.cn/s/blog_640531380100udhj.html


【1、与qt程序显示文字大小有关的两项】

export QWS_DISPLAY=LinuxFB:mmWidth200:mmHeight100:0   //输出设备为Linux framebuffer,尺寸定义(尺寸定义与文字大小有直接关系)

export QWS_SIZE=480x272   //屏幕大小

【2、屏幕旋转】

export QWS_DISPLAY=Transformed:Rot90    //旋转90 可以旋转0、90、180、270

想让qt支持旋转,在编译嵌入式qt的时候要加上-qt-gfx-transformed选项

【3、举一反三:在屏幕旋转的同时保持文字大小】

export QWS_DISPLAY=Transformed:Rot90:LinuxFB:mmWidth200:mmHeight100:0

 

【4、用-display参数来代替以上export的变量】

假如将运行的程序是qtdemo

qtdemo -qws  -display "LinuxFB:mmWidth200:mmHeight100:0"

qtdemo -qws  -display "Transformed:Rot90"

qtdemo -qws  -display "Transformed:Rot90:LinuxFB:mmWidth200:mmHeight100:0"


------------------sno:-----------------

当然也可以在配置文件中设置,如下:

export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/usr/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CALIBFILE=/usr/etc/pointercal
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=/dev/tty
export QTDIR=/usr/lib/QT
export LD_LIBRARY_PATH=$QTDIR:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/fonts
export QT_PLUGIN_PATH=/usr/lib/QT/plugins

export QWS_MOUSE_PROTO=tslib:/dev/input/event1
export QWS_DISPLAY='Transformed:Rot90'

------------sno: 另一个别人的设置信息:

export PATH=/opt/Qtopia/bin:$PATH
export LD_LIBRARY_PATH=/opt/Qtopia/lib:$LD_LIBRARY_PATH

export QTDIR=/usr/local/QtArm
export QPEDIR=/usr/local/QtArm
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QT_QWS_FONTDIR=/usr/local/QtArm/lib/fonts
export QWS_MOUSE_PROTO="TSLIB:/dev/input/event0 USB:/dev/input/mice"
export QWS_SIZE='320x240'


---------------------



<think>嗯,用户问的是在嵌入式Qt开发中,开发板是否需要事先移植Qt框架才能运行Qt程序。首先,我需要确认用户对嵌入式Qt的了解程。可能他们刚开始接触,或者已经有一定经验但遇到了问题。 用户之前的提问是关于嵌入式Qt裸机开发的,所以这次的问题可能是基于之前的讨论,想进一步了解移植的必要性。他们可能正在考虑自己项目的硬件选型,或者想知道是否需要自行移植Qt框架,或者是否有开发板已经预装了Qt支持。 我需要明确回答:是的,通常需要移植Qt框架到目标开发板,才能运行Qt应用程序。但有些开发板可能已经提供了移植好的Qt环境,这时候用户可以直接使用。不过大部分情况下,尤其是定制硬件,还是需要自己移植。 接下来,要详细解释为什么需要移植。因为Qt框架依赖于底层硬件和操作系统(如果有的话)的支持,比如图形驱动、输入设备驱动、字体渲染等。不同的开发板硬件配置不同,必须适配这些硬件组件才能让Qt应用程序正确运行。 然后,需要分情况讨论:有操作系统和无操作系统(裸机)的情况。比如在Linux系统上,可能需要配置显示服务器(如Wayland或X11),而在裸机环境下,需要更底层的驱动支持,比如直接操作LCD控制器。 还需要提到Qt的不同模块,比如Qt Core、Qt GUI、Qt Widgets、Qt Quick,每个模块对移植的要求不同。例如,Qt Quick需要图形渲染支持,可能需要OpenGL ES或软件渲染的实现。 另外,可能用户关心的是具体的移植步骤,比如交叉编译工具链的准备,配置Qt的编译选项,处理硬件相关的适配层。这时候需要举一些例子,比如修改Qt的配置文件,实现特定的硬件接口。 还要提到Qt官方提供的支持,比如Qt for Device Creation,或者针对特定芯片的BSP(板级支持包),这些可能简化移植过程。比如NXP的i.MX系列开发板可能有官方提供的Qt镜像,用户可以直接使用,而无需自己移植。 最后,总结一下,是否需要移植取决于开发板是否已经有适配好的Qt环境。如果是常见开发板,可能有现成的方案;如果是定制硬件,可能需要自行移植,或者基于官方文档和社区资源进行调整。 在回答中,要确保结构清晰,分点说明,同时给出实际例子和建议,帮助用户理解不同情况下的处理方式。还要注意术语的准确性,比如交叉编译、BSP、HAL等,必要时进行简要解释,避免用户混淆。</think>是的,在嵌入式Qt开发中,**开发板必须提前移植Qt框架**才能运行Qt程序。以下是具体说明和实现逻辑: --- ### 一、为何需要移植? Qt应用程序依赖框架的核心库(如`QtCore`、`QtGui`)和硬件抽象层,必须针对目标板的以下组件进行适配: 1. **图形渲染**:LCD控制器/GPU驱动 2. **输入设备**:触摸屏/按键驱动 3. **操作系统支持**:有无OS(如Linux、裸机) 4. **资源管理**:内存分配、文件系统访问 --- ### 二、移植的两种场景 #### **场景1:带操作系统的开发板(如Linux)** - **需要移植内容**: - **显示服务**:配置Framebuffer/Wayland/X11 - **输入子系统**:适配`evdev`或`tslib` - **字体/图标**:部署到`/usr/lib/fonts` - **示例**:在Raspberry Pi上部署Qt ```bash # 交叉编译Qt库 ./configure -device linux-rasp-pi4-g++ -opensource -confirm-license make && make install # 部署到开发板 scp -r /opt/qt5pi root@192.168.1.100:/usr/local ``` #### **场景2:裸机开发板(无OS)** - **需要移植内容**: - **硬件抽象层(HAL)**:实现`QGfxDriver`接口 - **内存管理**:替换`malloc`为静态分配 - **中断处理**:将触摸事件注入Qt事件循环 - **代码示例**:STM32的显示驱动适配 ```cpp class CustomFramebuffer : public QGfxDriver { public: void blit(const QRect &rect, const void *data) override { // 将data写入STM32的LTDC显存 memcpy((void*)(0xC0000000 + rect.y()*stride + rect.x()), data, rect.width()*rect.height()*4); } }; ``` --- ### 三、Qt移植的关键步骤 1. **交叉编译Qt源码** 配置时需指定目标平台参数: ```bash ./configure -xplatform linux-arm-gnueabi-g++ \ -no-opengl \ -qt-zlib \ -prefix /opt/qt-embedded ``` - 禁用不需要的模块(如`-no-sql`) - 启用硬件加速(如`-opengl es2`) 2. **实现硬件驱动接口** - 显示驱动:继承`QScreenDriver`,实现`connect()`和`disconnect()` - 输入驱动:继承`QInputDriver`,重写`readData()`解析触摸坐标 3. **资源嵌入** 通过`.qrc`文件将资源编译进二进制: ```xml <RCC> <qresource prefix="/"> <file>images/button.png</file> <file>fonts/wqy.ttf</file> </qresource> </RCC> ``` --- ### 四、免移植的特殊情况 以下开发板**可能已预装Qt环境**,可直接部署程序: 1. **NXP i.MX8**:官方提供基于Yocto的Qt镜像 2. **Raspberry Pi**:第三方社区维护的`qt5-default`包 3. **商用HMI模组**:如迪文科技的串口屏 --- ### 五、验证移植是否成功 1. **运行测试程序** ```bash export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 ./helloworld -platform linuxfb ``` 2. **性能指标** - 帧率:`60 FPS`以上为合格 - 启动时间:冷启动应小于`1秒` --- ### 六、常见问题解决 | 问题现象 | 原因 | 解决方案 | |---------------------------|---------------------|------------------------------| | 黑屏无显示 | 显存地址错误 | 检查`QT_QPA_FB_DRM`环境变量 | | 触摸坐标偏移 | 屏幕旋转未配置 | 设置`QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=rotate=90` | | 内存不足崩溃 | 动态内存分配过多 | 使用`QT_UL_USE_STATIC_ALLOCATION`宏 | --- ### 总结 - **必须移植**:除非使用官方预装Qt的开发板 - **移植复杂**:裸机 > Linux > Android - **推荐策略**:优先选择已适配Qt的开发板(如STM32MP1),可减少60%移植工作量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值