C++的跨平台桌面GUI库有很多,大体上分成两种流派:retained mode和immediate mode。
-
其中前者是主流的桌面GUI机制框架,包括:Qt、wxwidgets、gtk、juce等
-
后者是一些游戏引擎编辑器常用的GUI机制框架,包括:imgui、nanogui等
使用这些框架都支持构建在windows、mac、linux上面能运行的桌面图形界面程序。
但如果在开发小工具项目,要求跨平台、开源免费、协议友好、性能高、轻量级的需求,这里推荐FLTK库(
https://www.fltk.org/
),只需要作为一个依赖库的方式引入工程即可。
以下是一个使用FLTK开发的简单demo代码示例,功能是显示一个编辑框和一个按钮,点击按钮刷新编辑框的数字。
fltk_demo
- fltk-1.3.8
- src
|- main.cpp
- CMakeLists.txt
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(fltk_demo)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (WIN32)
set(CMAKE_EXE_LINKER_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
endif()
if (WIN32)
add_definitions(
-D_CRT_SECURE_NO_WARNINGS
-D_WINSOCK_DEPRECATED_NO_WARNINGS
endif()
add_subdirectory(fltk-1.3.8)
include_directories(fltk-1.3.8)
file(GLOB SRC
src/*.h
src/*.cpp
add_executable(${PROJECT_NAME} ${SRC})
target_link_libraries(${PROJECT_NAME}
main.cpp
#include <iostream>
#include <string>
#include "FL/Fl.H"
#include "FL/Fl_Window.H"
#include "FL/Fl_Box.H"
#include "FL/Fl_Input.H"
#include "FL/Fl_Button.H"
class MyWindow : public Fl_Window
public:
MyWindow(int w, int h, const char* title) : Fl_Window(w, h, title)
void init()
std::cout << "MyWindow init" << std::endl;
begin();
color(FL_DARK3);
int y = 10;
s_input = new Fl_Input(150, y, 100, 20, "Number:");
s_input->static_value(s_num_str.c_str());
y += 30;
Fl_Button* add_button = new Fl_Button(150, y, 60, 30, "Add Num");
resizable(add_button);
add_button->callback(handleAddButtonClick);
end();
static void handleAddButtonClick(Fl_Widget* widget, void* v)
std::cout << "MyWindow handleAddButtonClick" << std::endl;
int num = atoi(s_num_str.c_str());
num++;
s_num_str = std::to_string(num);
std::cout << "add num to " << num << std::endl;
s_input->static_value(s_num_str.c_str());
s_input->redraw();
private:
static Fl_Input* s_input;
static std::string s_num_str;
Fl_Input* MyWindow::s_input = nullptr;
std::string MyWindow::s_num_str = "0";
#include <string>
#include <algorithm>
int main(int argc, char** argv)
MyWindow* my_window = new MyWindow(400, 300, "MyWindow");
my_window->init();
my_window->show();
return Fl::run();
- cmake配置里面需要增加编译选项,可以避免界面启动后弹出控制台黑框,如果作为debug阶段可以保留
- 控件绑定的回调函数必须是全局或者静态函数
效果
源码
https://download.csdn.net/download/u012234115/87878308
C++的跨平台桌面GUI库有很多,大体上分成两种流派:retained mode和retained mode。以下是一个使用FLTK开发的简单demo代码示例,功能是显示一个编辑框和一个按钮,点击按钮刷新编辑框的数字。但如果在开发小工具项目,要求跨平台、开源免费、协议友好、性能高、轻量级的需求,这里推荐FLTK库(使用这些框架都支持构建在windows、mac、linux上面能运行的桌面图形界面程序。),只需要作为一个依赖库的方式引入工程即可。
fltk-rsFLTK 图形用户界面库的 Rust 绑定。FLTK crate 是一个跨平台的轻量级 gui 库,可以静态链接以生成小型、自包含和快速的 gui 应用程序。教程:视频书面Erco 的 FLTK 秘籍页面,这是一个优秀的 FLTK C++ 参考。为什么选择FLTK?轻的。小二进制文件,剥离后大约 1mb。内存占用小。速度。快速安装、快速构建、快速启动和快速运行。单个可执行文件。无需部署 DLL。支持旧架构。FLTK 的许可协议允许对闭源应用程序进行静态链接。主题性(支持 4 个主题:Base、GTK、Plastic 和 Gleam)。提供大约 80 个可定制的小部件。具有内置的图像支持。这是使用 FLTK 的软件列表。链接到官方 FLTK 存储库。官方文档的链接。用法只需将以下内容添加到您项目的 Cargo.toml 文件中:[dependencies ]fltk =" ^0.15"要使用 repo 中的最新更改:[dependencies ]fltk = {version =" ^0.15" ,git =" https://github.com/MoAlyousef/f
Qt是一个跨平台应用和用户界面开发框架,它包括一个跨平台类库、集成开发工具和跨平台IDE。通过使用Qt,你可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
2. Fltk
FLTK板条箱是一个跨平台的轻量级gui库,可以静态链接以生成小型,自包含且快速的gui应用程序。
Erco的FLTK作弊,这是出色的FLTK C ++参考。
为什么选择FLTK?
轻的。 小二进制文件,剥离后大约1mb。 。
速度。 快速安装,快速构建,快速启动和快速运行。
单个可执行文件。 没有要部署的DLL。
支持旧架构。
FLTK的许可许可,允许对封闭源应用程序进行静态链接。
Themability(4个受支持的主题:Base,GTK,Plastic和Gleam)。
提供约80个可定制的小部件。
具有内置的图像支持。
这是使用FLTK的软件的。
到官方FLTK存储库。
到官方文档。
只需将以下内容添加到项目的Cargo.toml文件中:
[ dependencies ]
什么?你还不知道C++能快速开发部署GUI?...
什么?你不知道Qt是什么...
这篇文章,教你怎么用Qt Creator2.0来做一个GUI。下载地址什么的不罗嗦,google之。我这里给出的,是每个QT GUI 工程用QT creator来做时的流程。
假设你已经安装好了qt sdk。
1.文件->新建工程或文件。
2.选择Qt控件项目->QT GUI应用。
3.取消...
FLTK(Fast Light Toolkit)是一个跨平台的C++GUI工具集,用在UNIX/Linux(X11)、微软Windows和Mac OS X上。FLTK提供现代的GUI功能,除却膨胀,通过OpenGL和内建的GLUT模拟器提供3D图形支持。最初由Bill Spitzak开发,当前由全世界一小组开发者使用美国一个中心仓库维护。
FLTK具有体积小、速度快和良好移植性等优点。
FLTK当前的稳定版(1.3.5)采用LGPL发布,意味着可以通过类库引用的方式(前提是不对FLTK本身代码进行