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 \
-DFLTK_BUILD_EXAMPLES=ON ..

# 编译为 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 库。

  • -DFLTK_BUILD_EXAMPLES=ON

    编译 example 目录中的文件,默认不会编译,只有 test

最后两项是添加 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 项目依赖了哪些 Windows 系统库,有两种方法:

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

参考资料

  1. FLTK 官网
  2. FLTK 中文手册
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值