开源跨平台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.bz2cd 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();
}

开源跨平台GUI库Fltk在Deepin Linux下的使用相关推荐

  1. Deepin Linux 下 OSG 安装

    Deepin Linux 下 OSG 安装 ** 前言: ** 女人天生就比男人情商高,男程序员情商更低,只能在东北玩泥巴.有一个好玩的泥巴OSG,它是开源跨平台的三维实时场景图开发引擎,被广泛应用在 ...

  2. 【转】deepin Linux下Picked up _JAVA_OPTIONS错误

    转自百度经验 在deepin linux下安装JDK,编译.执行java程序时出现Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp ...

  3. deepin/linux下svn客户端工具

    我的博客 deepin/linux下svn客户端工具 尝试过几款linux下svn的客户端例如RapidSVN,这个工具在添加svn仓库的时候总是会卡,总之用起来不太舒服,皇天不负有心人终于找了了另外 ...

  4. Deepin Linux下阿里旺旺的更新

    Deepin Linux商店中的阿里旺旺版本太低,安装后总是提醒要升级,但是大家知道的,不可能升级成功.        琢磨后,得到一个简单粗暴的方式.        先在Deepin Linux下安 ...

  5. C++轻量级跨平台桌面GUI库FLTK的简单使用

    C++的跨平台桌面GUI库有很多,大体上分成两种流派:retained mode和immediate mode. 其中前者是主流的桌面GUI机制框架,包括:Qt.wxwidgets.gtk.juce等 ...

  6. Linux中opengl库叫什么名字,Linux下的OpenGL——Mesa和GLX简介

    一.什么是Mesa和GLX 众所周知,OpenGL作为图形界的工业标准,其仅仅定义了一组2D和3D图形接口API,而对于窗口管理.IO消息响应等并没有规定.也就是说,OpenGL依赖各平台提供用于渲染 ...

  7. 3.★Deepin Linux 下火狐firefox浏览器安装★

    1.本人的笔记本是华为的 Deepin Linux ,自己一不小心删除了火狐firefox浏览器,所以又亲自安装上,所以分享一下. 2.打开终端,进入root xgj@xgj-PC:~$ su 密码: ...

  8. Deepin Linux下更新nvidia独显驱动

    最近给台式机装了deepin,用deepin自带的显卡驱动管理器切换的闭源驱动使用时会有迷之卡顿,而且hdmi音频输出设备睡眠后会自动切换,必须手动换回显示器音频才有声音.怀疑是debian库的老显卡 ...

  9. Deepin Linux 下安装 Qt

    一.下载安装 目前使用版本: deepin-20Beta-desktop-amd64 下载,可以直接从deepin 应用商店里安装:最后可能提示不可用: 二.可能需要下载其它需要的依赖: 1.用roo ...

  10. linux查看动态库导出的符号,Linux下控制动态库导出

    在Linux中动态库的确给程序带来了良好的扩充性,并减少了内存的使用量,但这是有代价的.例如: #include Int main(int argc, char *argv[]) { Printf(& ...

最新文章

  1. LeetCode5382. HTML 实体解析器
  2. DVWA Brute Force(low)
  3. c++远征之继承篇——继承方式
  4. 如何在应用系统中实现数据权限的控制功能
  5. error C2146: 语法错误 : 缺少“;”(在标识符“PVOID64”的前面)[转]
  6. QT下信号与槽不在同一个线程中如何connect
  7. sitemesh 2.4 装饰器学习
  8. 计算机关机后耗电问题,笔记本电脑关机后电池还会耗电怎么解决
  9. java 包含字符串 个数_java查找字符串中的包含子字符串的个数实现代码
  10. Clone使用方法详解【转载】
  11. 学校初一模拟赛(2019.4.20)
  12. 云端虚拟化技术的应用
  13. 【数据结构】带动画显示过程的递归求解迷宫问题
  14. 陶朗食品业务调整为两个业务版块,专注新鲜食品和加工食品
  15. 关于BOS开发工具启动EAS客户端提示使用限期0天的问题
  16. 网安刮起东风:360、深信服决战智能化
  17. 分享给大家一个比较装逼的小代码
  18. cpout引脚是干什么的_A3936芯片引脚图
  19. NBA名人堂之-威尔特·张伯伦|乔治·迈肯|比尔·沃顿|戴夫·考恩斯|威利斯·里德
  20. 计算机专业机房 英语,计算机与网络英语词汇(C3)

热门文章

  1. matlab tabular,LaTeX表格tabular背景色添加技巧
  2. EXCEL利用VBA把汉字转拼音(李晓锋版)20180828更新
  3. 熟识三菱PLC编程基本指令
  4. Visio 2016软件
  5. C11标准和C++11标准
  6. php表单验证插件下载,强力推荐10款Javascript表单验证插件
  7. 微信小程序富文本插件WxParse使用
  8. 全国省市区县json数据
  9. 一个简单的微信小程序支付demo
  10. CPC客户端安装教程