温馨提示×

C++在Ubuntu下的图形界面开发

小樊
43
2025-12-28 21:42:17
栏目: 编程语言

在 Ubuntu 上进行 C++ 图形界面开发

一 环境准备

  • 安装基础编译工具链与常用 IDE:
    • 工具链:sudo apt update && sudo apt install build-essential
    • 编辑器/IDE:VS Code(sudo snap install --classic code)、CLion(sudo snap install --classic clion)、Qt Creator(sudo snap install --classic qt-creator-community)
  • 以上准备完成后即可开始选择 GUI 框架并进行开发。

二 主流框架与快速上手

  • Qt(跨平台企业级首选)
    • 安装:sudo apt install qt5-default qttools5-dev-tools qtcreator
    • 最小示例(main.cpp):
      #include <QApplication>
      #include <QPushButton>
      int main(int argc, char *argv[]) {
          QApplication app(argc, argv);
          QPushButton button("Hello, Qt!");
          button.show();
          return app.exec();
      }
      
    • 构建:终端执行
      qmake -project
      qmake
      make
      ./your_project_name
      
  • GTKmm(GNOME 原生风格)
    • 安装:sudo apt install libgtkmm-3.0-dev
    • 最小示例(main.cpp):
      #include <gtkmm.h>
      class HelloWorld : public Gtk::Window {
      public:
          HelloWorld() {
              set_title("Hello, GTKmm");
              set_default_size(200, 200);
              auto label = Gtk::manage(new Gtk::Label("Hello, World!"));
              add(*label);
              label->show();
          }
      };
      int main(int argc, char* argv[]) {
          auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
          HelloWorld window;
          return app->run(window);
      }
      
    • 构建:g++ main.cpp -o hello_gtkmm pkg-config --cflags --libs gtkmm-3.0 && ./hello_gtkmm
  • FLTK(轻量级、嵌入式友好)
    • 安装:sudo apt install libfltk1.3-dev
    • 最小示例(main.cpp):
      #include <FL/Fl.H>
      #include <FL/Fl_Window.H>
      #include <FL/Fl_Button.H>
      void cb(Fl_Widget*, void*) { printf("Hello, FLTK!\n"); }
      int main(int argc, char** argv) {
          Fl_Window* w = new Fl_Window(300, 200, "Hello FLTK");
          Fl_Button* b = new Fl_Button(100, 80, 100, 30, "Click Me");
          b->callback(cb);
          w->end(); w->show(argc, argv);
          return Fl::run();
      }
      
    • 构建:g++ main.cpp -o hello_fltk fltk-config --cxxflags --libs && ./hello_fltk
  • wxWidgets(原生外观跨平台)
    • 安装:sudo apt install libwxgtk3.0-dev
    • 最小示例(main.cpp):
      #include <wx/wx.h>
      class MyApp : public wxApp { bool OnInit() override {
          (new wxFrame(nullptr, wxID_ANY, "Hello, wxWidgets"))->Show(true);
          return true;
      } };
      wxIMPLEMENT_APP(MyApp);
      
    • 构建:g++ wx-config --cxxflags -o hello_wx main.cpp wx-config --libs && ./hello_wx
  • 其他可选
    • ImGui(即时模式,适合调试工具/编辑器):sudo apt install libimgui-dev

三 框架选型建议

  • 需要跨平台与复杂 UI(动画、多媒体、数据库、网络)、工具链一体化:选 Qt(官方 Qt CreatorQt Quick/QML 支持完善)。
  • 专注 Linux/GNOME 原生体验、轻量高效:选 GTKmm
  • 资源受限或嵌入式、追求小巧与快速分发:选 FLTK
  • 强调各平台“原生控件外观”、商业友好许可:选 wxWidgets

四 构建与调试技巧

  • 获取编译/链接参数
    • pkg-config:用于 GTKmm/FLTK/wxWidgets(如:pkg-config --cflags --libs gtkmm-3.0fltk-config --cxxflags --libswx-config --cxxflags/--libs
    • qmake:用于 Qt(qmake -project → qmake → make)
  • 调试
    • IDE 调试:在 Qt Creator/CLion 中设置断点、单步执行
    • 命令行:g++ -g main.cpp -o app … 后用 gdb ./app 调试。

五 常见问题与排查

  • 命令未找到或找不到库
    • 确认已安装对应开发包(如 libgtkmm-3.0-dev、libfltk1.3-dev、libwxgtk3.0-dev),并更新索引:sudo apt update
  • 中文显示与字体
    • Qt 中使用 QFontDatabase 加载系统字体;在 GTKmm 中确保系统安装中文字体并正确设置 Pango 字体描述
  • 打包发布
    • Qt:使用 windeployqt(Windows)或 linuxdeployqt(Linux)收集依赖;FLTK 静态链接可减小体积;wxWidgets 发布时携带对应 GTK 运行时或采用静态构建

0