图形开发语言 工具

1、GTK+
GTK+基础
GTK+最初是GIMP的专用开发库,后来发展为Linux下开发图形界面的应用程序的主流开发工具之一。GTK+2.0是自由软件,并且是GNU工程的一部分。GTK+2.0的许可协议是LGPL。
GTK+使用C语言开发,但是其设计者使用面向对象技术。 在GNOME平台上提供了C++(gtkmm)、Perl、Ruby、Java和Python(PyGTK)绑定,其他的绑定有Ada、 D、 Haskell、PHP和所有的.NET编程语言。
与其他很多部件工具箱不同,GTK+并不基于Xt。这一决策优劣互见:优点是GTK+可以应用于其他系统,其灵活性也很强;而缺点就是它无法利用以传统方法为X11定制的X资源数据库。
Glade是一个界面设计工具,但是它也包含了一种描述GUI界面的XML语言,它和libglade一起工作就可以直接使用GTK和GNOME控件。

2、Qt
Qt简介
Qt是Trolltech公司的一个产品。非免费
Qt是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且 允许真正地组件编程。
自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用 程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。
Qt支持下述平台: MS/Windows - 95、98、NT 4.0、ME、和2000
Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX和其它很多X11平台
Macintosh - Mac OS X
Embedded - 有帧缓冲(framebuffer)支持的Linux平台。

2019年8月21日, Qt公司推出了Qt for MCUs

3、wxWidgets
wxWidgets原名wxWindows,是由Julian Smart于1992年还在英国爱丁堡大学人工智能应用研究所开始的一个项目。开源软件(LGPL),针对C++、Python以及Perl的跨平台GUI Library工具集。
详细介绍,参见细述https://www.wxwidgets.org/downloads/,由于他没有private属性,所以他里面的函数和变量你全都能继承下来,然后照着源代码进行修改和调整,最后变成自己针对性的控件. 反正, 在UI上没他办不到的.

绘图基础https://www.jianshu.com/p/6420be9dae01

例子https://www.cnblogs.com/hhh5460/p/4237766.html
python平台 https://wxpython.org/pages/overview/#hello-world

ImGui + ImPlot:在桌面环境(windows/linux)依赖 GPU 或高级图形 API(OpenGL/DirectX/Vulkan)的单文件C++库,

核心特性

  • 轻量:仅需几个 .cpp/.h 文件,无外部依赖。
  • 跨平台:支持 Windows/Linux/macOS,可集成到 OpenGL/DirectX/Vulkan/SDL 等后端。
  • 立即模式:每一帧都重新绘制整个 UI,逻辑与渲染绑定,非常适合工具类、调试类界面。
  • 无需复杂布局系统:控件按代码顺序排列,动态响应数据变化。
  • 高度可嵌入:常用于游戏引擎调试面板、机器人监控界面、工业 HMI 原型等。
 

image

 

在codeblocks中的使用

image

 

// main.cpp - ImGui + ImPlot Minimal Demo for Code::Blocks (MinGW-w64 + GLFW + OpenGL3)
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
#include <glad/glad.h> // 注意:MinGW-w64 的 GLFW 通常不需要 glad,但保留安全

#include "imgui.h"
#include "imgui_impl_glfw.h"
#include "imgui_impl_opengl3.h"
#include "implot.h"

int main(int, char**)
{
    // 初始化 GLFW
    if (!glfwInit())
        return -1;

    // 设置 OpenGL 3.3 Core Profile(兼容大多数显卡)
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif

    GLFWwindow* window = glfwCreateWindow(1024, 768, "ImGui + ImPlot Template", NULL, NULL);
    if (!window) {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glfwSwapInterval(1); // Enable vsync

    // 加载 OpenGL 函数(MinGW-w64 通常无需 glad,但若报错可加)
    // if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { /* error */ }

    // 初始化 ImGui
    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    ImPlot::CreateContext(); // 必须在 ImGui::CreateContext() 之后

    ImGuiIO& io = ImGui::GetIO();
    io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;

    ImGui::StyleColorsDark();

    // Setup Platform/Renderer backends
    ImGui_ImplGlfw_InitForOpenGL(window, true);
    ImGui_ImplOpenGL3_Init("#version 130"); // OpenGL 3.0

    // 主循环
    while (!glfwWindowShouldClose(window))
    {
        glfwPollEvents();

        // Start ImGui frame
        ImGui_ImplOpenGL3_NewFrame();
        ImGui_ImplGlfw_NewFrame();
        ImGui::NewFrame();

        // ========== 【你的 UI 代码从这里开始】==========
        ImGui::Begin("Hello, ImGui!");
        ImGui::Text("This is a minimal ImGui + ImPlot demo.");
        static float f = 0.0f;
        ImGui::SliderFloat("Float", &f, 0.0f, 10.0f);
        ImGui::Text("Application average %.3f ms/frame (%.1f FPS)",
                    1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate);
        ImGui::End();

        // ImPlot 示例:实时正弦波
        static float plot_data[100] = {};
        static int frame = 0;
        plot_data[frame % 100] = sinf(frame * 0.1f);
        frame++;

        if (ImPlot::BeginPlot("Sine Wave", "Time", "Value", ImVec2(-1, 200))) {
            ImPlot::PlotLine("sin(x)", plot_data, 100);
            ImPlot::EndPlot();
        }
        // ========== 【你的 UI 代码到这里结束】==========

        // Rendering
        glClearColor(0.15f, 0.15f, 0.15f, 1.00f);
        glClear(GL_COLOR_BUFFER_BIT);
        ImGui::Render();
        ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());

        glfwSwapBuffers(window);
    }

    // Cleanup
    ImPlot::DestroyContext();
    ImGui_ImplOpenGL3_Shutdown();
    ImGui_ImplGlfw_Shutdown();
    ImGui::DestroyContext();

    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}
imgui

image

 


嵌入式图形解决方案:
第三方的嵌入式 GUI 软件包有 QtμC/GUIminiGUIZLG/GUI ,emwin,threadX。

Littlevgl(16位及以上单片机Flash大于64KB,RAM大于20KB

链接:
官网网站:https://littlevgl.com/
Github项目主页:https://github.com/littlevgl/lvglrt-thread的移植LittlevGL2RTT
GuiLite:最低资源需求

 

同时GuiLite具有很强的跨平台特性:

  • 支持的操作系统:iOS/macOS/WatchOS,Android,Linux(ARM/x86-64),Windows(包含VR),RTOS… 甚至无操作系统的单片机
  • 支持的开发语言:C/C++, Swift, Java, Javascript, C#, Golang…
  • 支持的第3方库:Qt, MFC, Winforms, CoCoa…

除此之外,GuiLite 提供一系列辅助开发工具:

  • ☁️完美的“云” + “物联网”解决方案:让你轻松驾驭全球IoT业务
  • 支持多语言,采用 UTF-8 编码;📀支持视频播放
  • 资源制作工具为你定制自己的字体/图片资源
  • 所见即所得的GUI布局工具
  • 编译活跃度统计,及实时分析
  • 支持3D & Web
  • 支持Docker,一条命令启动

 最新的 GuiLite 源码,已经是单头文件的形式(GuiLite.h),所以,如果要将其闭源,需要开发者自己从 GuiLite.h 中分离出类成员函数的实现部分(即 GuiLite.cpp),而仅仅保留声明的部分。编译库的时候,编译 GuiLite.cpp 即可;而在使用的时候,则向外提供仅包含声明的 GuiLite.h 文件

软件首页;   软件文档;  软件下载    
    GuiLite与单片机,GuiLite移植到STM32F4 +OLED(I2C)开发板上,
             参考
                     MCU SPI屏也能跑这么炫酷的特效?来,移植起来秀一秀

 对于类似12864的可以用傻孩子的菜单框架

玲珑GUI:源码下载教程介绍移植

  简单介绍:适用于单片机的带图形化编辑界面的解决方案。

       移植要点:增大MCU堆的大小,由于LingLong GUI在创建GUI的时候需要利用堆来分配空间

VisualCom是一款国产电子元器件与模组仿真软件

ZLG开源 GUI开源 引擎 AWTK(针对嵌入式Linux):gitee地址

Lopaka 是一款开源图形编辑器,旨在为 TFT_eSPI、U8g2、AdafruitGFX 和 Flipper Zero 提供图形创建界面

 minigui:由魏永明先生于1998年底开始开发,后成立北京飞漫软件技术有限公司并提供开源版本,MiniGUI 4.0.2 版本中支持国产物联网操作系统 RT-Thread

基于I2C接口的图形库:Tiny Graphics Library

Iced 是一个为 Rust 编程语言编写的跨平台 GUI 库,“专注于简单性和类型安全”。Iced 的设计思路受到了 Elm 语言的启发。Iced 工具包不仅适用于 Linux、macOS 和 Windows,还适用于 Web 应用程序.

基于ST7735和ST7789驱动芯片的小型彩色TFT显示器系列的图形库:Tiny TFT Graphics Library

参考文章:

1 基于STM32-GUI经验分享篇

posted on 2019-06-21 09:04  杰瑞鼠  阅读(927)  评论(0)    收藏  举报