开源跨平台GUI库Fltk在Deepin Linux下的使用
開源跨平臺GUI庫Fltk在Deepin Linux下的使用
- 前言
- 一、下載安裝
- 二、樣例使用
- 三、自編代碼
- 四、后記
前言
在互聯(lián)網(wǎng)應(yīng)用漫天的現(xiàn)在,實體企業(yè)、工廠卻繞不開大量的桌面應(yīng)用,開發(fā)工具有恐龍C#,有難用的MFC,也有沒落的Delphi,還有新星QT。工業(yè)品怕被卡脖子,還是用全開源的吧!OS還是用咱們國產(chǎn)的Deepin Linux,GUI用C++版的Fltk,短小精悍、速度快、可定制性強,今天一測究竟。
一、下載安裝
到官網(wǎng) www.fltk.org 可以看到最新的穩(wěn)定版,我下載的是fltk-1.3.7-source.tar.bz2,才4.4Mb.
解壓到工作目錄或主目錄:
進入其目錄后,用configure配置, --help可以查看參數(shù),如果安裝過程中缺少某些庫,比如xft,可以用參數(shù)不安裝xft, 還可以選安裝字符集支持cp936.
./configure --help ./configure --disable-xft --enable-cp936如果缺少某些關(guān)鍵部分,比如X11, opengl等,configure的記錄會提示你,用 sudo apt-get install xxx 補上。
如果順利,接下來就是編譯和安裝。
二、樣例使用
與其他開源庫比較,Fltk自帶的例子算很豐富了。在其目錄的test目錄下,有許多簡單程序,都已經(jīng)在make時編譯好了,可直接運行。比如,輸入 ./unittests 可展示多種特性,包括皮膚功能。
但字體效果不好:
用于工控的界面如下,可能看上去有點寒磣,但如果加上自己設(shè)計的皮膚,就脫胎換骨啦!
還有很多例子,都有源碼和編譯好的,都在同一目錄(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(); }如果按照網(wǎng)上的說法: g++ hello.cpp -lfltk -o hello 在早期版本可以,而現(xiàn)在編譯參數(shù)太復雜了,如果不用cmake,就用它自帶的工具fltk-config:
fltk-config --compile hello.cpp就會生成可運行的 hello 程序。
其他網(wǎng)友介紹鏈接:
Fltk入門
外國網(wǎng)友的入門翻譯為漢語
中文顯示有問題,可以參考https://blog.csdn.net/u013591757/article/details/18909491
但我測試,中文沒有顯示
折騰了許久,發(fā)現(xiàn)編譯Fltk時,./configure 不要帶其他參數(shù),直接用默認值,因為Deepin Linux 已經(jīng)把中文字體安裝和配置好了。用以下指令就可以查看到哪些中文字體:
fc-list :lang=zh fc-list | grep 體把上面的hello.cpp中的文本換成中文如下:
Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");再編譯運行,結(jié)果如下圖:
四、后記
雖然自帶的編譯命令: fltk-config --compile hello.cpp可以,但對于稍微復雜的程序,比如用了opengl的程序,就不再適用。需要查看錯誤原因,并補上相關(guān)的庫。比如:
#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(); }總結(jié)
以上是生活随笔為你收集整理的开源跨平台GUI库Fltk在Deepin Linux下的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS录音、播放、WAV以及caf转成M
- 下一篇: tar打包命令(linux)