嵌入式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
添加 quick
和 qml
模块:
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