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

嵌入式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
相关推荐
Huangjin007_1 分钟前
【Linux 系统篇(十一)】基础开发工具(六) —— 版本控制器 Git
linux·运维·git
j7~20 分钟前
【Linux】二十六.线程篇三《Linux多线程编程:线程控制、线程ID以及进程地址空间分布、线程局部存储__thread以及clone系统调用》---详解
linux·运维·服务器·开发语言·c++·多线程编辑·线程的控制
ahccqw1 小时前
电机入门学习(电机认识,分类)
嵌入式硬件
jianqiang.xue8 小时前
系统服务层设计:沉淀通用能力,让业务层只专注业务
stm32·单片机·嵌入式硬件·mcu·物联网·esp32
乌萨奇也要立志学C++8 小时前
【Linux】网络基础 从零理解网络通信:局域网、跨网传输与 Socket 预备知识
linux·服务器·网络
RisunJan10 小时前
Linux命令-slabtop(实时显示内核 slab 缓存信息)
linux
无垠的广袤10 小时前
【RA-Eco-RA2T1开发板】介绍、环境搭建、工程测试
单片机·嵌入式硬件·串口通信·uart·开发环境·blink
画面无声10 小时前
STM32的SPI通信原理与练习记录
c语言·stm32·单片机·嵌入式硬件·学习
weixin_4568083811 小时前
【沁恒蓝牙开发】IAP升级流程
c语言·单片机·嵌入式硬件
数字新视界11 小时前
用电安全管理系统解决方案
物联网·安全·电力监控系统·用电安全·大榕树