嵌入式Linux无窗口系统下搭建 Qt 开发环境

news/2024/12/4 4:39:45/

嵌入式Linux无窗口系统下搭建 Qt 开发环境

本文将介绍如何在树莓派的嵌入式 Linux 环境下,搭建 Qt 开发环境,实现无窗口系统模式(framebuffer)下的图形程序开发。


1. 安装 Qt 环境

接下来,安装核心 Qt 开发库以及与 QML 和 Qt Quick 相关的库:

sudo apt install -y qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtdeclarative5-dev qml-module-qtquick2
  • qtbase5-dev: 安装 Qt 核心开发库。
  • qtchooser: 管理不同版本的 Qt 环境。
  • qt5-qmake: Qt 项目生成工具。
  • qml-module-qtquick2和qtdeclarative5-dev: 提供 Qt Quick 2 支持。

3. 配置 Qt (无窗口模式)

在没有窗口系统(如 X11 或 Wayland)的环境下,Qt 可以使用framebuffer渲染图形。

使用帧缓冲设备(如 /dev/fb0),可以通过以下方式启用:

export QT_QPA_PLATFORM=linuxfb

4. 创建 Qt 程序

4.1 创建项目目录

在树莓派上创建一个新的 Qt 项目目录:

mkdir qt
cd qt

4.2 创建 main.cpp 文件

使用文本编辑器创建并编辑 main.cpp 文件:

nano main.cpp

main.cpp 文件内容:

#include <QGuiApplication>
#include <QQuickWindow>
#include <QTimer>// 创建对话框窗口
QQuickWindow* createDialog(QQuickWindow* parent) {QQuickWindow* dialog = new QQuickWindow(parent);dialog->setTitle("弹出对话框");dialog->setWidth(400);dialog->setHeight(300);dialog->setX(parent->width() / 2 - dialog->width() / 2);dialog->setY(parent->height() / 2 - dialog->height() / 2);dialog->setColor(Qt::blue);  // 设置背景色return dialog;
}int main(int argc, char** argv) {QGuiApplication app(argc, argv);// 主窗口QQuickWindow mainWindow;mainWindow.setTitle("主窗口");mainWindow.setWidth(800);mainWindow.setHeight(600);mainWindow.setColor(Qt::black);mainWindow.show();// 定时弹出对话框QTimer::singleShot(3000, [&mainWindow]() {QQuickWindow* dialog = createDialog(&mainWindow);dialog->show();});return app.exec();
}

4.3 生成项目文件

使用 qmake 生成项目文件:

qmake -project

4.4 编辑 .pro 文件

编辑生成的 .pro 文件,确保包含正确的 Qt 模块:

nano qt.pro

添加 quickqml 模块:

QT += core gui widgets qml quick

4.5 生成 Makefile

执行以下命令生成 Makefile:

qmake

4.6 编译程序

使用 make 编译程序:

make

4.7 运行程序

运行编译后的程序:

./qt

5. 调试与优化

在调试过程中,可以启用 Qt 的调试日志,以帮助排查问题。

5.1 启用调试日志

在运行程序时,启用调试日志:

export QT_LOGGING_RULES="qt.qpa.*=true"

这将打印与 Qt 平台插件相关的调试信息。

5.2 确保帧缓冲权限

如果程序报出权限错误,确保当前用户对帧缓冲设备(如 /dev/fb0 )有访问权限。执行以下命令:

sudo chmod a+rw /dev/fb0


http://www.ppmy.cn/news/1552183.html

相关文章

TypeScript 快速上手

TypeScript 快速上手 ⼀、TypeScript 简介⼆、为何需要 TypeScript三、编译 TypeScript1. 命令⾏编译2. ⾃动化编译 四、类型声明五、类型推断六、类型总览七、常⽤类型与语法1. any2. unknown3. never4. void5. object6. tuple7. enum8. type9. ⼀个特殊情况10. 复习类相关知识…

40分钟学 Go 语言高并发:【实战课程】性能瓶颈分析与优化实战

性能瓶颈分析与优化实战 一、性能测试基础 测试类型目的工具关注指标基准测试性能基线测量go test -bench执行时间、内存分配负载测试并发处理能力hey, wrkQPS、响应时间压力测试系统极限pprof, traceCPU使用率、内存使用性能分析瓶颈定位pprof热点函数、内存分配 让我们创建…

早鸟票开启:2025年计算机应用、图像处理与视觉算法国际学术会议(CAIPVA2025)

#学术会议早知道##早鸟价优惠# 2025年计算机应用、图像处理与视觉算法国际学术会议&#xff08;CAIPVA2025&#xff09; 2025 International Conference on Computer Applications, Image Processing, and Vision Algorithms 重要信息 会议地点&#xff1a;中国昆明 会议时…

查看虚拟机的MAC地址

查看虚拟机的MAC地址的方法取决于您使用的虚拟化软件。以下是一些常见虚拟化软件中查看MAC地址的方法&#xff1a; VMware Workstation/Player 打开VMware Workstation/Player。选择要查看的虚拟机&#xff0c;右键点击并选择“编辑虚拟机设置”。在“硬件”选项卡中&#xf…

10 设计模式之装饰模式

一、什么是装饰模式&#xff1f; 1.装饰模式&#xff08;Decorator Pattern&#xff09; 是一种结构型设计模式&#xff0c;用于动态地向对象添加新的功能&#xff0c;而无需修改其原始代码。它通过创建一系列装饰类&#xff0c;将功能封装在一个对象中&#xff0c;从而实现功…

在1~n中、找出能同时满足用3除余2,用5除余3,用7除余2的所有整数。:JAVA

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 在1~n中、找出能同时满足用3除余2&#xff0c;用5除余3&#xff0c;用7除余2的所有整数。 输入描述: 输入一行&#xff0c;包含一个正整数n &#xff0c;n在100000以内 输出描述:…

UICollectionView在xcode16编译闪退问题

使用xcode15运行工程&#xff0c;控制台会出现如下提示&#xff1a; Expected dequeued view to be returned to the collection view in preparation for display. When the collection views data source is asked to provide a view for a given index path, ensure that a …

YoloV10-yaml文件理解

最近在学习和尝试改进yolov结记录一下原始代码的理解,希望大佬指正.10,在这里总 [1] 论文&#xff1a;https://arxiv.org/abs/2405.14458 [2] 代码&#xff1a;GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection [NeurIPS 2024] YOLOv10的新特性 1. 无…