【C++】开源:FLTK图形界面库配置与使用

😏★,° :.☆( ̄▽ ̄)/$:.°★ 😏

这篇文章主要介绍FLTK图形界面库配置与使用。
无专精则不能成,无涉猎则不能通。------梁启超

欢迎来到我的博客,一起学习,共同进步。

喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • [:smirk:1. 项目介绍](#:smirk:1. 项目介绍)
    • [:blush:2. 环境配置](#:blush:2. 环境配置)
    • [:satisfied:3. 使用说明](#:satisfied:3. 使用说明)

😏1. 项目介绍

官网:https://www.fltk.org/

项目Github地址:https://github.com/fltk/fltk

FLTKFast Light Toolkit)是一个跨平台的C++图形用户界面(GUI)开发库。它是一个轻量级、高效且易于使用的库,旨在提供快速而灵活的GUI开发解决方案。

以下是一些FLTK库的特点和功能:

1.跨平台支持:FLTK可以在多个操作系统上运行,包括Windows、macOS和Linux等。它使用了原生的API,使得应用程序在不同平台上的外观和行为保持一致。
2.轻量级和高效:FLTK库非常小巧,库文件大小较小,不依赖于其他大型库或运行时环境。它被设计为高效的库,具有快速的绘图和事件处理能力。
3.简单易用:FLTK提供了简单、直观的API和类,使得GUI开发变得容易上手。它具有清晰的文档和丰富的示例,帮助开发人员迅速入门并加速开发过程。
4.绘图和绘制:FLTK提供了强大的绘图功能,可以绘制各种形状、文本、图像等,以创建自定义界面元素和图形效果。
5.事件处理:FLTK库具有事件驱动的架构,可以响应鼠标、键盘和其他用户交互事件。开发人员可以轻松地编写事件处理代码来实现用户界面的交互性和响应性。
6.控件和窗口管理:FLTK库提供了多种常用的GUI控件,如按钮、文本框、滑块、列表框等,以及窗口和布局管理器,帮助开发人员构建复杂的用户界面。
7.支持OpenGL:FLTK与OpenGL集成良好,可以轻松创建使用OpenGL进行图形渲染和3D绘图的应用程序。

FLTK是一个功能丰富、易于使用且跨平台的GUI开发库,适用于各种应用程序,从简单的工具到复杂的图形应用程序。

😊2. 环境配置

bash 复制代码
# apt安装
sudo apt install libfltk1.3-dev
bash 复制代码
# 编译
g++ -o main main.cpp  -lfltk

😆3. 使用说明

创建窗口示例:

cpp 复制代码
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>

void buttonCallback(Fl_Widget* widget, void* data) {
    Fl_Button* button = (Fl_Button*)widget;
    button->label("Clicked!");
}

int main() {
    Fl_Window* window = new Fl_Window(300, 200, "FLTK Example");

    Fl_Button* button = new Fl_Button(100, 80, 100, 40, "Click Me");
    button->callback(buttonCallback);

    window->end();
    window->show();

    return Fl::run();
}

简单计算器示例:

cpp 复制代码
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Output.H>
#include <iostream>
#include <sstream>

Fl_Input* input;
Fl_Output* output;

// 按钮回调函数
void buttonClicked(Fl_Widget* widget, void* data) {
    Fl_Button* button = (Fl_Button*)widget;
    const char* label = button->label();

    std::string inputValue = input->value();
    std::stringstream ss(inputValue);
    double inputNumber;
    ss >> inputNumber;

    double result = 0.0;

    if (label == "+") {
        result = inputNumber + atof(output->value());
    } else if (label == "-") {
        result = atof(output->value()) - inputNumber;
    } else if (label == "*") {
        result = inputNumber * atof(output->value());
    } else if (label == "/") {
        if (inputNumber != 0) {
            result = atof(output->value()) / inputNumber;
        } else {
            output->value("Error: Division by zero");
            return;
        }
    }

    std::stringstream resultSS;
    resultSS << result;
    output->value(resultSS.str().c_str());
}

int main() {
    Fl_Window* window = new Fl_Window(300, 200, "Simple Calculator");

    input = new Fl_Input(10, 10, 280, 30);
    input->align(FL_ALIGN_TOP);

    output = new Fl_Output(10, 50, 280, 30);
    output->align(FL_ALIGN_TOP);

    Fl_Button* addButton = new Fl_Button(10, 90, 60, 30, "+");
    addButton->callback(buttonClicked);

    Fl_Button* subButton = new Fl_Button(80, 90, 60, 30, "-");
    subButton->callback(buttonClicked);

    Fl_Button* mulButton = new Fl_Button(150, 90, 60, 30, "*");
    mulButton->callback(buttonClicked);

    Fl_Button* divButton = new Fl_Button(220, 90, 60, 30, "/");
    divButton->callback(buttonClicked);

    window->end();
    window->show();

    return Fl::run();
}

以上。

相关推荐
冬奇Lab9 小时前
Skill 系列(02):Skill 安全风险——三类攻击面的实战测试
人工智能·安全·开源
冬奇Lab9 小时前
每日一个开源项目(第138篇):OpenMontage - 把 AI 编程助手变成完整的视频制作团队
人工智能·开源·claude
众少成多积小致巨14 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
修己xj1 天前
GoTab:打造属于你自己的个性化浏览器新标签页
开源
蝎子莱莱爱打怪2 天前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
冬奇Lab2 天前
每日一个开源项目(第137篇):Penpot - 真正开源的设计协作工具,SVG 原生格式消灭设计-开发鸿沟
前端·开源·设计
冬奇Lab3 天前
每日一个开源项目(第135篇):codebase-memory-mcp - 给 AI Agent 一张代码库的知识图谱
人工智能·开源·llm
uniquejing4 天前
《每次 API 调用前扔掉 43% Token,我开源了一个 AI 提示词瘦身工具》
开源
clint4565 天前
C++进阶(1)——前景提要
c++
文心快码BaiduComate5 天前
Comate 搭载GLM-5.2:百万上下文,稳定支撑长程任务
前端·程序员·开源