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

news/2024/7/10 20:30:56 标签: c++, 开源, 开发语言

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍FLTK图形界面库配置与使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. 项目介绍
    • :blush:2. 环境配置
    • :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. 环境配置

# apt安装
sudo apt install libfltk1.3-dev
# 编译
g++ -o main main.cpp  -lfltk

😆3. 使用说明

创建窗口示例:

#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();
}

简单计算器示例:

#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();
}

在这里插入图片描述

以上。


http://www.niftyadmin.cn/n/5285086.html

相关文章

中北大学 软件构造 U+及上课代码详解

作业1 1.数据类型可分为两类:(原子类型) 、结构类型。 2.(数据结构)是计算机存储、组织数据的方式&#xff0c;是指相互之间存在一种或多种特定关系的数据元素的集合 3.代码重构指的是改变程序的(结构)而不改变其行为&#xff0c;以便提高代码的可读性、易修改性等。 4.软件实…

【开源】基于Vue+SpringBoot的软件学院思政案例库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理员2.2 普通教师 三、系统展示四、核心代码4.1 查询思政案例4.2 审核思政案例4.3 查询思政课程4.4 思政案例点赞4.5 新增思政案例评语 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的软件学…

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…

将自定义的集合数据使用pagehelper进行分页

PageHelper 是一个用于在 MyBatis 中进行分页查询的插件&#xff0c;它主要设计用于对从数据库查询的结果进行分页。 如果数据不是直接从 MySQL 数据库中查询得到&#xff0c;而是已经存在于内存中的集合&#xff08;如 List、ArrayList 等&#xff09;&#xff0c;你可以通过以…

鸿蒙插槽?全局插槽和局部插槽?数据不更新?

Builder的基本语法数据是不会响应式的 第一种&#xff1a; 全局插槽&#xff1a;传入的变量是state数据&#xff08;数据是对象也一样&#xff09;&#xff0c;但是button点击更改&#xff0c;并没有任何反应。规则就是不更新 Entry Component struct Demo02 {State message:…

web前端游戏项目-辨色大比拼【附源码】

web前端游戏项目-辨色大比拼【附源码】 《辨色大比拼》是一个旨在测试和提升玩家颜色识别能力的在线游戏。在游戏中&#xff0c;玩家将通过辨识颜色来解谜并推进游戏进程。辨色大比拼也是一个寓教于乐的游戏&#xff0c;它不仅提供了一个有趣的辨色挑战&#xff0c;还能帮助玩…

如何深入理解Java的多态?

在Java中&#xff0c;多态&#xff08;polymorphism&#xff09;是面向对象编程的一个重要概念&#xff0c;它允许你使用一个通用的接口来表示不同的对象和操作这些对象&#xff0c;而不必关心具体的对象类型。多态性有两种主要形式&#xff1a;编译时多态&#xff08;静态多态…

java中: 为什么在idea中新建的项目不能新建类?

为什么在idea中新建的项目中不能新建类 解决方法1方法2 解决 方法1 新建项目—一路确认----直到出现: 选择new window新的窗口即可 方法2 若选择了 this Window 当前窗口, 出现下图无法创建class类文件 则如下图操作 正常显示 ————————————————————…