C++学习 图形接口及window窗口

本文介绍了一个使用简单窗口类创建网格布局的方法。通过定义窗口大小及网格间距,利用循环为每个网格线创建Line对象,并将其附加到窗口中,最终展示了一个带有均匀网格线的窗口界面。
Simple_window myWin(Point(100, 100), 600, 400, "grid");
int x_size = myWin.x_max();
int y_size = myWin.y_max();
int x_grid = 80;
int y_grid = 40;
Lines grid;
for (int x = x_grid; x < x_size; x += x_grid)
grid.add(Point(x, 0), Point(x, y_size));
for (int j = y_grid; j < y_size; j += y_grid)
grid.add(Point(0, j), Point(x_size, j));
myWin.attach(grid);
myWin.wait_for_button();
### C++ GUI 图形界面窗口库教程 在C++中创建图形界面(GUI)通常依赖于专门的库或框架。以下是几种常见的C++ GUI 库及其基本使用方法: #### 1. Qt Framework Qt 是一种功能强大且广泛使用的跨平台 GUI 开发框架,支持多种操作系统(Windows、Linux 和 macOS)。它提供了丰富的类集合来构建桌面和嵌入式应用。 ##### 创建简单的 Qt 窗口示例: ```cpp #include <QApplication> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.resize(400, 300); // 设置窗口大小 window.setWindowTitle("Simple Qt Window"); // 设置窗口标题 window.show(); // 显示窗口 return app.exec(); } ``` 此代码片段展示了如何通过 `QWidget` 类创建一个基础窗口[^1]。要运行该程序,需安装 Qt 并配置好开发环境。 --- #### 2. Dear ImGui Dear ImGui 是一款轻量级的即时模式 GUI 工具包,专注于调试工具、数据可视化以及游戏 UI 的快速原型设计。它的特点是易于集成到现有项目中,并支持多个渲染后端(如 OpenGL、Vulkan 等)。 ##### 使用 Dear ImGui 创建窗口: ```cpp #define IMGUI_IMPL_OPENGL_LOADER_GLAD #include "imgui.h" #include "imgui_impl_glfw.h" #include "imgui_impl_opengl3.h" #include <glad/glad.h> #include <GLFW/glfw3.h> void render() { static bool show_demo_window = true; // 是否显示演示窗口 ImGui::Begin("Example Window"); ImGui::Text("Hello, world!"); ImGui::Checkbox("Show Demo Window", &show_demo_window); if (show_demo_window) { ImGui::ShowDemoWindow(&show_demo_window); } ImGui::End(); } int main() { GLFWwindow* window; glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); window = glfwCreateWindow(800, 600, "ImGui Example", NULL, NULL); if (!window) { glfwTerminate(); exit(-1); } glfwMakeContextCurrent(window); gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); ImGui::CreateContext(); ImGui_ImplGlfw_InitForOpenGL(window, true); ImGui_ImplOpenGL3_Init("#version 130"); while (!glfwWindowShouldClose(window)) { glfwPollEvents(); ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); render(); ImGui::Render(); int display_w, display_h; glfwGetFramebufferSize(window, &display_w, &display_h); glViewport(0, 0, display_w, display_h); 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; } ``` 这段代码展示了一个基于 OpenGL 渲染器的简单窗口实现[^2]。需要注意的是,Dear ImGui 更适合用于调试工具而非完整的应用程序界面。 --- #### 3. GTKmm / FLTK GTKmm 是 GTK+ 的 C++ 绑定版本,而 FLTK 则是一种更小巧的 GUI 套件。两者都适用于 Linux 环境下的本地应用开发。 ##### 示例:FLTK 创建窗口 ```cpp #include <FL/Fl.H> #include <FL/Fl_Window.H> #include <FL/Fl_Box.H> int main() { Fl_Window* window = new Fl_Window(400, 300, "FLTK Example"); Fl_Box* box = new Fl_Box(20, 40, 360, 240, "Hello, World!"); box->box(FL_UP_BOX); box->labelsize(36); box->labelfont(FL_BOLD + FL_ITALIC); box->align(FL_ALIGN_CENTER); window->end(); window->show(); return Fl::run(); } ``` 以上代码利用 FLTK 构建了一个带有文本标签的基础窗口[^3]。 --- #### 总结 不同的 GUI 库各有优劣,具体选择取决于项目的复杂度和个人偏好。对于初学者而言,推荐从 **Qt** 或 **FLTK** 入手;而对于需要高性能实时更新的应用场景,则可以考虑 **Dear ImGui**。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值