开源跨平台GUI库Fltk在Deepin Linux下的使用

开源跨平台GUI库Fltk在Deepin Linux下的使用

前言

在互联网应用漫天的现在,实体企业、工厂却绕不开大量的桌面应用,开发工具有恐龙C#,有难用的MFC,也有没落的Delphi,还有新星QT。工业品怕被卡脖子,还是用全开源的吧!OS还是用咱们国产的Deepin Linux,GUI用C++版的Fltk,短小精悍、速度快、可定制性强,今天一测究竟。

一、下载安装

到官网 www.fltk.org 可以看到最新的稳定版,我下载的是fltk-1.3.7-source.tar.bz2,才4.4Mb.
解压到工作目录或主目录:

tar -xzvf fltk-1.3.7-source.tar.bz2

cd fltk-1.3.7/

进入其目录后,用configure配置, --help可以查看参数,如果安装过程中缺少某些库,比如xft,可以用参数不安装xft, 还可以选安装字符集支持cp936.

./configure --help
./configure --disable-xft --enable-cp936

如果缺少某些关键部分,比如X11, opengl等,configure的记录会提示你,用 sudo apt-get install xxx 补上。
如果顺利,接下来就是编译和安装。

make 
sudo make install

二、样例使用

与其他开源库比较,Fltk自带的例子算很丰富了。在其目录的test目录下,有许多简单程序,都已经在make时编译好了,可直接运行。比如,输入 ./unittests 可展示多种特性,包括皮肤功能。
皮肤
但字体效果不好:
字体
用于工控的界面如下,可能看上去有点寒碜,但如果加上自己设计的皮肤,就脱胎换骨啦!
工控界面
还有很多例子,都有源码和编译好的,都在同一目录(test)下,名为demo的例子是其他例子的总集成。

三、自编代码

为了不污染它的例子,在另外的目录下,自己写个Hello world:

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

如果按照网上的说法: g++ hello.cpp -lfltk -o hello 在早期版本可以,而现在编译参数太复杂了,如果不用cmake,就用它自带的工具fltk-config:

fltk-config --compile hello.cpp

就会生成可运行的 hello 程序。
在这里插入图片描述
其他网友介绍链接:
Fltk入门
外国网友的入门翻译为汉语

中文显示有问题,可以参考https://blog.csdn.net/u013591757/article/details/18909491
但我测试,中文没有显示

折腾了许久,发现编译Fltk时,./configure 不要带其他参数,直接用默认值,因为Deepin Linux 已经把中文字体安装和配置好了。用以下指令就可以查看到哪些中文字体:

fc-list :lang=zh
fc-list | grep

把上面的hello.cpp中的文本换成中文如下:

  Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");

再编译运行,结果如下图:
在这里插入图片描述

四、后记

虽然自带的编译命令: fltk-config --compile hello.cpp可以,但对于稍微复杂的程序,比如用了opengl的程序,就不再适用。需要查看错误原因,并补上相关的库。比如:

#include <stdlib.h>
#include <FL/Fl.H>
#include <FL/gl.h>
#include <FL/Fl_Gl_Window.H>

// fltk-config --compile hello.cpp 无法编译

// 需要自己增加编译指令如下
/* g++ hello.cpp -I/usr/local/include -I/usr/local/include/FL/images -I/usr/local/include/freetype2 -I/usr/include/uuid -I/usr/include/libpng16 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT /usr/local/lib/libfltk.a -lXrender -lXcursor -lXfixes -lXext -lXft -lfontconfig -lXinerama -lpthread -ldl -lm -lX11 -lfltk_gl -lGL
*/
class MyWin: public Fl_Gl_Window
{
	void draw()
	{
		glLoadIdentity();
		glViewport(0, 0 , 400, 300);
	}
	public:
		MyWin(int x, int y, int w, int h, const char *L): Fl_Gl_Window(x, y, w, h)
		{};
};
int main (int argc, char **argv)
{
    Fl_Window *window = new MyWin (100, 80, 640, 480, "mywindow 中文");
    window->end ();
    window->show (argc, argv);
    // Fl::set_idle(idle_cb);
    return Fl::run();
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值