FLTK 学习一:简介和安装

article/2025/9/1 14:07:27

文章目录

  • FLTK 简介
  • FLTK 安装
    • FLTK Windows安装
    • FLTK Linux 安装
  • FLTK 简单示例
  • 参考资料

FLTK 简介

从网上引用的一段 FLTK 的介绍

FLTK (Fast Light Tool Kit 发音为fulltick) 是一种使用 C++ 开发的 GUI 工具包,它可以应用于 Unix, Linux, MS-Windows95/98/NT/2000 和 MacOS 操作系统平台,相对于其它的许多图形接口开发工具包(如MFC、GTK、QT等),它具有体积小、速度快的优点,且有着更好的移植性。

说白了,FLTK 就是一个 C++ 的界面库,可以用于开发图形界面,它具有如下特点,也是优点:

  1. 非常轻量小巧,性能很好。
  2. 提供丰富的跨平台的 GUI 组件 (Widget),有按钮,菜单,窗口等近六十个。
  3. 提供 Fl_GL_Window,支持 OpenGL 相关的操作。
  4. 提供界面设计工具 FLUID,能非常方便进行界面的设计(个人感觉仅仅是相对方便,Qt 更方便)。
  5. 良好的跨平台移植性,支持各种操作系统。
  6. 支持多种 C++ 编译器,如 GCC,VC,Clang 等等。
  7. 灵活性,FLTK 本身可以定制,以满足不同的需要,这使得 FLTK 在嵌入式开发上有着极大的优势。

也正是有这些优点,所以 C++ 之父推荐也推荐初学者使用。但 FLTK 的缺点也很明显:

  1. 几乎不做系统 API 的封装,如果需要可移植性,则需要自己封装系统 API。
  2. 界面比较 Low,如果想要开发漂亮的界面,请移步 Qt。
  3. 对绘图、动画或视频相关的界面支持不足,容易有问题(网上查到的,我还没有遇见过)。

个人感觉,FLTK 轻量小巧,上手简单,非常适合用于开发项目原型,或制作小工具,是一个值得推荐学习的 GUI 项目。


FLTK 安装

FLTK Windows安装

在 Windows 下推荐使用 cmake 安装,默认安装生成静态库。编译命令如下:

# 生成项目
cmake -G "Visual Studio 14 2015 Win64" \
-DCMAKE_INSTALL_PREFIX=D:\tmp\fltk-1.4.x \
-DCMAKE_BUILD_TYPE=Release \
-DZLIB_LIBRARY=D:\ProgramFiles\zlib\lib\ \
-DZLIB_INCLUDE_DIR=d:\ProgramFiles\zlib\include\ ..# 编译为 Release 版本
cmake --build . --config Release# 安装到指定路径
cmake --install .

cmake 指令说明:

  • -G “Visual Studio 14 2015 Win64”

    指定项目生成环境,我使用 VS 2015 生成项目,生成 64 位版本。

  • -DCMAKE_INSTALL_PREFIX=path

    指定项目的安装路径

  • -DCMAKE_BUILD_TYPE=Debug|Release

    指定项目的编译类型,一般是 Debug 或 Release。我在编译时,发现此设置不起作用,还是会编译为 Debug版本,不知何故,所以在第二步的编译时,添加了 --config Release 设置。

  • -DZLIB_LIBRARY=path

    指定 zlib 库文件的路径,默认可以不加,使用 FLTK 自带的 zlib 库。

  • -DZLIB_INCLUDE_DIR=path

    指定 zlib 头文件的路径,默认可以不加,使用 FLTK 自带的 zlib 库。

最后两项是添加 zlib 头文件和库文件的路径,不是必须的,若指定,会多生成一个 fltk_z.lib 库文件。


FLTK Linux 安装

FLTK Linux 安装与 Windows 是一样的,也可以使用 ./configure --prefix && make && make install 直接安装,总的来说,要比 Windows 简单一点。

我在 CentOS7 的虚拟机上安装时,提示缺少 Xft,直接 yum 安装即可:

 yum install libXft-devel

FLTK 简单示例

安装完成后,就可以直接写 FLTK 应用程序了,下面是一个简单的 hello world 的示例

// desc: FLTK hello world 示例
// file: hello.cpp#include "FL/Fl.H"
#include "FL/Fl_Window.H"
#include "FL/Fl_Box.H"int main(int argc, char* argv[]) {Fl_Window *window = new Fl_Window(340, 180, "hello");Fl_Box *box = new Fl_Box(20, 40, 300, 100, "Hello, World!");box->box(FL_UP_BOX);box->labelfont(FL_BOLD + FL_ITALIC);    // 加粗,斜体box->labelsize(36);box->labeltype(FL_SHADOW_LABEL);window->end();window->show(argc, argv);return Fl::run();
}

我使用 VS 2015 生成项目,需要先设置 FLTK 的头文件和库文件路径,添加 fltk.lib,但编译时还是会报引用错误,而且有好多引用错误,如

1>fltk.lib(fl_WinAPI_platform_init.obj) : error LNK2001: 无法解析的外部符号 GdiplusStartup
1>fltk.lib(Fl_GDI_Graphics_Driver_line_style.obj) : error LNK2001: 无法解析的外部符号 GdipSetPenStartCap
1>fltk.lib(Fl_GDI_Graphics_Driver.obj) : error LNK2001: 无法解析的外部符号 GdipSetPenEndCap
1>fltk.lib(Fl_GDI_Graphics_Driver_line_style.obj) : error LNK2001: 无法解析的外部符号 GdipSetPenEndCap
1>fltk.lib(Fl_GDI_Graphics_Driver.obj) : error LNK2001: 无法解析的外部符号 GdipSetPenLineJoin
1>fltk.lib(Fl_GDI_Graphics_Driver_line_style.obj) : error LNK2001: 无法解析的外部符号 GdipSetPenLineJoin
1>fltk.lib(Fl_win32.obj) : error LNK2001: 无法解析的外部符号 __WSAFDIsSet
1>fltk.lib(Fl_win32.obj) : error LNK2001: 无法解析的外部符号 __imp_select
1>fltk.lib(Fl_win32.obj) : error LNK2001: 无法解析的外部符号 __imp__TrackMouseEvent

这是因为 fltk.lib 还依赖了很多 Windows 系统库,需要将其引用进来,所以还需要引入如下库文件

gdiplus.lib
comctl32.lib
ws2_32.lib
user32.lib

这也算 Windows 下编程比较坑的地方,标准路径下的系统库都需要手动引入。再次编译,大功告成,运行结果如下图
在这里插入图片描述

那如何才能知道 FLTK 项目依赖了哪些系统库中,有两种方法:

  • 方法一:逐个将无法解析的符号放在网络上搜索,一般都能查明出处。
  • 方法二:在 cmake 编译 FLTK 项目时,会产生一系列的中间文件,可以查看文件 test/hello.dir/Release/hello.tlog/link.command.1.tlog,里面就是记录 FLTK 自带的 hello 项目所需要的所有依赖文件。

参考资料

  1. FLTK 官网
  2. FLTK 中文手册

http://chatgpt.dhexx.cn/article/LNQ7Yt6p.shtml

相关文章

安装使用FLTK图形库

FLTK是Fast Light Toolkit的简称,是一个跨平台的C GUI包,FLTK提供xiandai GUI功能,而且通过OpenGL支持3D图像。 下载FLTK安转包fltk-1.3.4-1-source.tar.gz: http://www.fltk.org/software.php?VERSION1.3.4&FILEfltk/1.3.…

BOBCAT: 基于双层优化的计算机化自适应测验(超硬核解读论文+阅读论文技巧)

文章目录 前言AbstractIntroductionCAT 介绍传统的认知诊断模型传统的CAT选题策略传统方法局限性 ContributionsBOBCAT框架双层优化问题BOBCAT框架BOBCAT 训练过程 OptimizationExperiments能力评估问题暴露和内容重叠问题选择 Conclusions 前言 大家好,我是小曾&a…

项目管理理论与实践(3)——如何进行有效的项目管理

对于具有成功并有效的项目管理经验的项目经理,还是非常难得的。因为项目管理并不是一件很简单的事情。虽然自己对于项目管理的理解还是处于初级阶段,但是利用自己学习到的理论知识,还是想做一次归纳,希望对大家能够受用。那么就开…

计算机自适应考试技巧,计算机自适应题库实现

在软件的开发中,基于题库的计算机自适应考试已成为一个重要的发展方向,而计算机自适应题库的建立就显得尤为重要。计算机自适应测验(Computerized Adaptive Testing,简称CAT)是近年来发展起来的一种新的测验形式。这种测验以项目反应理论为基础,以计算机技术为手段,在题库…

项目经理都会面临什么问题?

最近手里一个项目接近尾声,还有一个项目正在初期调研,无缝衔接,原定结项之后的3天假期也泡汤了,每一个环节都出问题我真的会心累,再加上最近组里人事变动,也没有及时做好复盘,客户又出现了临时需…

反应-扩散方程(Reaction-diffusion system)

文章目录 1. 单组分反应-扩散方程2. 双组分反应-扩散方程3. 三组分和更多组分的反应-扩散方程4. Fishers equation4.1 KPP方程 5. Belousov–Zhabotinsky reaction5.1 历史5.2 化学机理5.2.1 变体 5.3 Noise-induced order5.3.1 数学背景 6. Briggs–Rauscher reaction7. ZFK e…

项目延期的因素有哪些?项目经理应该如何应对

项目延期是项目管理中常见的问题之一,也是管理者最头疼的问题。项目延期的出现可能是由于以下原因: 1、工作中突发事件多:在评估工作量时,通常会基于过往的经验来进行评估,但由于信息社会中各种信息随处可见&#xf…

项目管理中影响项目进度的原因及解决方法

项目管理中对工期的控制主要是进度控制,在项目进行过程中,由于项目时间跨度长,人员繁杂,如果管理不规范,就容易导致项目进度滞后,如何管理好施工进度是管理者需要解决的问题之一。 1、项目计划缺乏执行力…

图解PMP项目管理马斯洛需求层次理论在公司管理中的应用!

马斯洛的需求层次结构是心理学中的激励理论,包括人类需求的五级模型,通常被描绘成金字塔内的等级。 从层次结构的底部向上,需求分别为:生理(食物和衣服),安全(工作保障)…

php 项目反应理论,科学网—好文 | 纽约石溪大学:机器学习中基于项目反应理论的集成学习 - 陈培颖的博文...

机器学习中,研究者们对分类集成的关注与日俱增,尤其关注分类精度的提升。IJAC近期发表了来自纽约石溪大学研究者的最新成果,该研究基于项目反应理论,提出一种加权投票方法---基于IRT理论的集成学习算法,该方法可正确处…

项目反应理论 EM估计

项目反应理论参数的EM估计 写在前面: 本文主要描述了整个IRT使用EM算法参数的估计过程,其中涉及大量公式,如只是需要了解IRT相关基础知识,请转战wiki~~ 预警: 大量公式来袭~&#…

项目反应理论

项目反应理论(item response theory)是属于心理学中认知诊断常用的一种理论,即根据被测试者针对某个问题的答案来对被测者的认知状况进行估计。“项目”实质就是测试题,“反应”就是被测者的答案。也有学者称项目反应理论也是机器学习中的一个类别,即根据被测者对测试题的…

密码校验密码正则校验,密码表单校验总结

一.前言,日常开发中,表单校验是出现率非常高的一个需求,特别是密码校验。本文就针对常见的几种密码校验(含正则)做个总结,做个共享。 二. 密码必须包含数字,字母和特殊符号。 写法:…

正则表达式-几种常见的密码校验

原文:https://jingyan.baidu.com/article/5bbb5a1b634cca53eba179ce.html 首先说一下密码必须是6~18位之间的数字,正则表达式为"^[0-9]{6,18}$",其中[0-9]表示必须是数字,{6,18}表示必须在6到18位之间,代码如…

【算法】程序猿必备算法

文章目录 快速排序算法堆排序算法归并排序二分查找算法BFPRT(线性查找算法)DFS(深度优先搜索)BFS(广度优先搜索)Dijkstra算法动态规划算法朴素贝叶斯分类算法Floyd Warshall算法贝尔曼福特算法贪心算法拓扑排序最小生成树分治算法KMP暴力匹配更多来源 快…

数据结构+算法=程序

(1) 数据结构算法程序。 每个学计算机的人都听过这个公式。 这个公式是尼克劳斯沃斯在1976年出版《算法数据结构:程序》一书中提出。尼克劳斯沃斯还是Pascal编程语言的发明人,而且他还在1973年出版《系统程序设计导论》一书中提出…

程序的调试利器

目录: 一、Printf串口输出 二、半主机的巧妙应用 三、SWO引脚的巧妙应用 四、RTT的应用 五、JScope的应用_MCU ------------------------------------------------------------------------------------------------- 一、Printf串口输出 作为一名嵌入式软件…

应用程序调试技术

课程简介 调试技术实务分为调试基本概念和设置,Windows下常用到调试工具VS和Windbg的使用,自动化调试技术,以及实际调试场景示例等。不仅仅是介绍枯燥的程序调试技术,而是深入的从操作系统实现以及.NET虚拟机实现的本质出发&#…

debug运行程序的原理

0 代码运行的原理是什么? 代码的运行方式可以分为直接执行和解释执行两类。 不知道平时你有没有注意,可执行文件直接 ./xxx 就可以执行,而执行 js 文件需要node ./xxx,执行python文件需要python ./xxx,这就是编译执行(直接执行)…

程序的调试技巧。

什么是调试? 调试又叫Debug,又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。 生活中所有发生的事情都一定有迹可循,如果问心无愧,就不需要掩盖也就没有迹象了,如果问心有愧疚&#…