C++轻量级跨平台桌面GUI库FLTK的简单使用

这篇具有很好参考价值的文章主要介绍了C++轻量级跨平台桌面GUI库FLTK的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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") # do not pop out console for release
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})

# both win and linux use the same lib name
target_link_libraries(${PROJECT_NAME}
    fltk
)

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;

		// ui
		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()); // set init text

		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;

		// update text
		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阶段可以保留
  • 控件绑定的回调函数必须是全局或者静态函数

效果
C++轻量级跨平台桌面GUI库FLTK的简单使用
源码
https://download.csdn.net/download/u012234115/87878308文章来源地址https://www.toymoban.com/news/detail-474885.html

到了这里,关于C++轻量级跨平台桌面GUI库FLTK的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Gitea:轻量级、开源的Git仓库管理平台

    Gitea是一款开源的、基于Go语言编写的轻量级Git服务器。它提供了类似于GitHub的功能,如代码托管、版本控制、团队协作等,但更加轻便和易于部署。Gitea的设计初衷是为了让团队或个人能够更方便地管理和分享自己的代码,同时不需要花费大量的资源和精力去搭建和维护一个

    2024年04月23日
    浏览(46)
  • Go 跨平台GUI框架fyne 中文文档1 开始

    Fyne (go 跨平台 GUI ) 入门中文文档1开始 hello word A simple app starts by creating an app instance with app.New() and then opening a window with app.NewWindow(). Then a widget tree is defined that is set as the main content with SetContent() on a window. The app UI is then shown by calling ShowAndRun() on the window. 一个简单的应用程序首先

    2024年02月13日
    浏览(47)
  • C++轻量级单元测试框架

    单元测试是构建稳定、高质量的程序、服务或系统的必不可少的一环。通过单元测试,我们可以在开发过程中及时发现和修复代码中的问题,提高代码的质量和可维护性。同时,单元测试也可以帮助我们更好地理解代码的功能和实现细节,从而更好地进行代码重构和优化。

    2023年04月25日
    浏览(76)
  • 我想开发一款跨平台桌面软件,请告诉我qt、electron、tauri、pyqt、flutter分别适合开发哪些跨平台桌面

    不同的跨平台桌面开发工具适用于不同的应用场景和开发者需求。以下是关于 Qt、Electron、Tauri、PyQt、Flutter 的简要说明,以帮助你更好地选择适合你项目的工具: Qt: 适用场景: Qt 是一个强大的 C++ 框架,适用于开发需要高性能和原生外观的桌面应用。它具有广泛的平台支持

    2024年02月22日
    浏览(79)
  • 推荐一款轻量级全栈式开源测试平台!

    1、RunnerGo介绍 今天给大家介绍一个好用的测试平台:RunnerGo(开源)。RunnerGo是一款轻量级、全栈式的测试平台,支持接口管理、场景管理、性能测试、自动化测试等功能。与市面上的性能测试工具不同的是RunnerGo基于go语言研发,更加轻量级。           附上官网和开源链

    2024年02月12日
    浏览(61)
  • Golang WebView:打造跨平台的桌面应用

    随着互联网的发展和智能设备的普及,Web应用成为了主流的应用开发方式之一。然而,有些场景下仍然需要使用桌面应用来满足特定的需求。为了结合Web技术和桌面应用的优势,Golang提供了一种名为\\\"WebView\\\"的库,它可以帮助开发人员快速构建跨平台的桌面应用。本文将介绍

    2024年02月22日
    浏览(49)
  • 跨平台桌面端框架wails 修改默认图标

    博主开发了一个浏览器aweb123.com 执行 wails build就会自动生成新的图标

    2024年02月07日
    浏览(50)
  • 轻量级虚拟桌面基础架构(VDI) 从任何地方和任何设备进行安全快速访问,为混合云环境启用远程工作

    轻量级虚拟桌面基础架构(VDI) 从任何地方和任何设备进行安全快速访问,为混合云环境启用远程工作 交付具有成本效益且可扩展的 VDI 保证安全快速的虚拟应用程序和虚拟桌面 保护知识产权 支持全球合作 许多企业拥有混合计算基础架构,其中某些应用程序已迁移到云中,而

    2024年02月03日
    浏览(37)
  • Qat++,轻量级开源C++ Web框架

    目录 一.简介 二.编译Oat++ 1.环境 2.编译/安装 三.试用 1.创建一个 CMake 项目 2.自定义客户端请求响应 3.将请求Router到服务器 4.用浏览器验证 Oat++是一个面向C++的现代Web框架 官网地址:https://oatpp.io github地址:https://github.com/oatpp/oatpp Oat++具有如下特性: ●随处运行 Oat++没有任何

    2024年02月01日
    浏览(75)
  • 初识轻量级分布式任务调度平台 xxl-job

    大家好,这里是 Rocky 编程日记 ,喜欢后端架构及中间件源码,目前正在阅读 xxl-job 源码。同时也把自己学习该 xxl-job 笔记,代码分享出来,供大家学习交流,如若笔记中有不对的地方,那一定是当时我的理解还不够,希望你能及时提出。 如果对于该笔记存在很多疑惑,欢迎

    2024年02月10日
    浏览(334)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包