Ubuntu下C++图形界面编程如何入门
小樊
41
2025-12-23 01:20:52
入门路线与工具
- 在 Ubuntu 上做 C++ GUI,常用路线有:Qt(功能全、跨平台、生态完善)、GTK+/gtkmm(GNOME 生态、Linux 原生)、FLTK(轻量、上手快)、wxWidgets(贴近原生外观)、以及用于工具/引擎的 Dear ImGui(即时模式、适合调试/可视化)。建议先装好基础编译工具,再按所选框架安装开发库与示例工程跑通“Hello World”。
环境准备
- 安装基础编译工具与构建链:
- sudo apt update && sudo apt install build-essential cmake
- 选择你的第一套框架并安装(示例命令):
- Qt5:sudo apt install qt5-default qtbase5-dev qtchooser
- GTK3:sudo apt install libgtk-3-dev
- gtkmm3:sudo apt install libgtkmm-3.0-dev
- FLTK:sudo apt install libfltk1.3-dev
- wxWidgets:sudo apt install libwxgtk3.0-dev
- Dear ImGui(配合 GLFW/OpenGL):sudo apt install libimgui-dev libglfw3-dev libopengl-dev
- IDE 可选:Qt Creator、VS Code(配合 CMake/Meson)、CLion 等。
三种路线快速上手
- Qt(Widgets 应用)
- 安装后可直接用 Qt Creator 新建“Qt Widgets Application”,或手工编写最小化示例:
- 代码示例(main.cpp)
#include
#include
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPushButton button(“Hello, Qt!”);
button.show();
return app.exec();
}
- 编译运行(两种方式)
- 命令行:qmake -project && qmake && make && ./your_app
- 或 CMake(CMakeLists.txt 片段)
cmake_minimum_required(VERSION 3.16)
project(HelloQt LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(hello main.cpp)
target_link_libraries(hello Qt5::Widgets)
- GTK+ 3(C 接口)
- 安装开发库后,示例与编译命令:
- 代码示例(main.cpp)
#include <gtk/gtk.h>
static void activate(GtkApplication *app, gpointer user_data) {
GtkWidget *window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), “Hello, GTK+”);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
gtk_widget_show_all(window);
}
int main(int argc, char **argv) {
GtkApplication *app = gtk_application_new(“org.gtk.example”, G_APPLICATION_FLAGS_NONE);
g_signal_connect(app, “activate”, G_CALLBACK(activate), NULL);
int status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return status;
}
- 编译:g++
pkg-config --cflags gtk+-3.0 -o myapp main.cpp pkg-config --libs gtk+-3.0
- FLTK(轻量 C++ GUI)
- 安装后示例与编译命令:
- 代码示例(main.cpp)
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
void cb(Fl_Widget*, void*) { printf(“Button clicked!\n”); }
int main() {
Fl_Window win(300, 200, “Hello, FLTK”);
Fl_Button btn(100, 80, 100, 30, “Click Me”);
btn.callback(cb);
win.end(); win.show();
return Fl::run();
}
- 编译:g++
pkg-config --cflags fltk -o myapp main.cpp pkg-config --libs fltk
- Dear ImGui(即时模式,适合工具/调试)
- 安装依赖后,示例与编译要点:
- 代码示例(main.cpp,基于 GLFW+OpenGL3)
#include “imgui.h”
#include “backends/imgui_impl_glfw.h”
#include “backends/imgui_impl_opengl3.h”
#include <GLFW/glfw3.h>
int main() {
if (!glfwInit()) return -1;
GLFWwindow* window = glfwCreateWindow(1280, 720, “ImGui”, nullptr, nullptr);
glfwMakeContextCurrent(window); glfwSwapInterval(1);
IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGui::StyleColorsDark();
ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(“#version 130”);
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame();
ImGui::Begin(“Hello, ImGui!”); ImGui::Text(“This is ImGui”); ImGui::End();
ImGui::Render();
glClearColor(0.45f, 0.55f, 0.60f, 1.00f); glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
glfwSwapBuffers(window);
}
ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext();
glfwDestroyWindow(window); glfwTerminate(); return 0;
}
- 编译(pkg-config 方式示例):g++ main.cpp
pkg-config --cflags --libs imgui glfw3 opengl -o imgui_demo
- 注意:ImGui 需搭配渲染后端(如 GLFW+OpenGL3),更适合做调试面板/编辑器,而非传统桌面应用发布形态。
如何选择与下一步
- 选择建议
- 追求功能完整、跨平台与工具链:选 Qt。
- 偏好 GNOME 生态、Linux 原生外观:选 GTK+/gtkmm。
- 需要轻量、依赖少、快速原型:选 FLTK。
- 希望贴近各平台原生控件:选 wxWidgets。
- 做游戏/引擎/可视化调试工具:选 Dear ImGui。
- 下一步学习路径
- 控件与布局:按钮、文本框、列表、网格、菜单/工具栏、对话框。
- 事件与信号槽/回调:用户交互、定时器、线程与 UI 刷新。
- 资源管理:图片/字体、翻译与多语言、主题与样式。
- 构建与打包:CMake/Meson、单元测试、打包发布(如 AppImage、deb)。