图形界面开发

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


Qt 图形界面开发

文档概述

本文档介绍如何在 Quectel Pi M1 的 Debian 系统中搭建 Qt6 图形界面开发环境,并创建、编译和运行一个基于 Qt Quick/QML 的示例程序。

环境准备

sudo apt update
sudo apt install -y build-essential cmake ninja-build qt6-base-dev qt6-base-dev-tools qt6-declarative-dev qt6-declarative-dev-tools qt6-wayland

创建工程

本示例工程包含以下三个源码文件:

  • main.cpp(程序入口文件)

  • Main.qml(Qt Quick 图形界面)

  • CMakeLists.txt(CMake 工程配置文件)

创建 main.cpp

文件内容:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[]){
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.loadFromModule("QtQuectelDemo", "Main");

    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

创建 Main.qml

文件内容:

import QtQuick
import QtQuick.Controls

ApplicationWindow {
    width: 640;
    height: 480;
    visible: true;
    title: "Qt Quectel Demo";

    Column {
        anchors.centerIn: parent;
        spacing: 20;

        Text {
            id: label;
            text: "Hello Quectel Pi M1!";
            font.pixelSize: 28;
        }

        Button {
            text: "Click Me";
            onClicked: {
                label.text = "Qt Demo Running!";
            }
        }
    }
}

创建 CMakeLists.txt

文件内容:

cmake_minimum_required(VERSION 3.16)

project(QtQuectelDemo LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Quick QuickControls2)

qt_standard_project_setup(REQUIRES 6.8)

qt_add_executable(appQtQuectelDemo
    main.cpp
)

qt_add_qml_module(appQtQuectelDemo
    URI QtQuectelDemo
    VERSION 1.0
    QML_FILES
        Main.qml
)

target_link_libraries(appQtQuectelDemo
    PRIVATE
        Qt6::Quick
        Qt6::QuickControls2
)

install(TARGETS appQtQuectelDemo
    BUNDLE DESTINATION .
    RUNTIME DESTINATION bin
)

编译工程

在源码目录执行:

mkdir -p build
cd build
cmake -G Ninja ..
ninja

生成可以执行文件appQtQuectelDemo。

运行程序

(1)在 GNOME 终端里执行:./appQtQuectelDemo

../../_images/image_HuYmbKIH7oO8scxxIoUcoPxFnug.webp

(2)在ssh或者adb的连接下运行程序

export XDG_RUNTIME_DIR=/run/user/1007
export WAYLAND_DISPLAY=wayland-0
export QT_QPA_PLATFORM=wayland
./appQtQuectelDemo

运行效果

程序启动后将显示 Qt 图形界面窗口。

../../_images/image_Oq7Abpwueo3v41xLaswcOOZWnCg.webp ../../_images/image_IUkjbCUIVoqEypxrOGdcwUTNnac.webp

wxWidgets 图形界面开发

文档概述

本文档介绍如何在 Quectel Pi M1 的 Debian 系统中搭建 wxWidgets 图形界面开发环境,并创建、编译和运行一个基于 wxWidgets 的示例程序。

环境准备

sudo apt update
sudo apt install -y build-essential cmake ninja-build libwxgtk3.2-dev libgtk-3-0

创建工程

创建 main.cpp

文件内容

#include <wx/wx.h>
class QuectelFrame : public wxFrame
{
public:
    QuectelFrame()
        : wxFrame(nullptr,
                  wxID_ANY,
                  "wxWidgets Quectel Demo",
                  wxDefaultPosition,
                  wxSize(640, 480))
    {
        wxPanel *panel = new wxPanel(this);
        wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);

        statusText = new wxStaticText(
            panel,
            wxID_ANY,
            "Hello Quectel Pi M1!"
        );

        wxFont font = statusText->GetFont();
        font.SetPointSize(20);
        statusText->SetFont(font);

        wxButton *button = new wxButton(
            panel,
            wxID_ANY,
            "Click Me"
        );

        mainSizer->AddStretchSpacer();
        mainSizer->Add(statusText, 0, wxALIGN_CENTER | wxALL, 10);
        mainSizer->Add(button, 0, wxALIGN_CENTER | wxALL, 10);
        mainSizer->AddStretchSpacer();

        panel->SetSizer(mainSizer);

        button->Bind(
            wxEVT_BUTTON,
            &QuectelFrame::OnButtonClick,
            this
        );

        Centre();
    }

private:
    wxStaticText *statusText;

    void OnButtonClick(wxCommandEvent &event){
        statusText->SetLabel("wxWidgets Demo Running!");
    }
};

class QuectelApp : public wxApp
{
public:
    bool OnInit() override{
        QuectelFrame *frame = new QuectelFrame();
        frame->Show(true);
        return true;
    }
};

wxIMPLEMENT_APP(QuectelApp);

创建 CMakeLists.txt

文件内容

cmake_minimum_required(VERSION 3.16)

project(WxQuectelDemo LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(wxWidgets REQUIRED COMPONENTS core base)

include(${wxWidgets_USE_FILE})

add_executable(appWxQuectelDemo
    main.cpp
)

target_link_libraries(appWxQuectelDemo
    PRIVATE
        ${wxWidgets_LIBRARIES}
)

编译工程

在源码目录执行:

mkdir -p build
cd build
cmake -G Ninja ..
ninja

运行程序

./appWxQuectelDemo

../../_images/image_Ss96bUsZCosxgextWcZcapMdn0f.webp

运行效果

程序启动后将显示 wx 图形界面窗口。

../../_images/image_C6GJbhxbyoA1pmx9WKMc3IMtnW3.webp ../../_images/image_Kz2Obp3wVoyBakx9jvEc8fyBnsd.webp

Weston 环境下 Qt 图形应用

前文已经完成 Qt 开发环境安装、工程创建及编译,生成可执行程序:appQtQuectelDemo

切换 Weston 桌面:

qpi-config switch weston
reboot

配置 Weston Wayland 环境

cd /home/pi/QtQuectelDemo/build
export XDG_RUNTIME_DIR=/run/user/root
export WAYLAND_DISPLAY=wayland-1
export QT_QPA_PLATFORM=wayland
export QT_WAYLAND_SHELL_INTEGRATION=wl-shell
export QT_QUICK_BACKEND=software

运行 Qt 程序

./appQtQuectelDemo

运行效果

../../_images/image_BzmDbqJjloK1UMxUFEDcZYgjnDc.webp ../../_images/image_VNiVbDfqloKTLtxvl3pcwSEKnde.webp

Weston 环境下 wxWidgets 兼容性验证

Weston 环境下 wxWidgets 存在 Wayland 兼容性问题,功能暂未验证通过。