1. 程式人生 > >qt移植解惑

qt移植解惑

Qt是一個多平臺的C++圖形使用者介面應用程式框架。它提供給應用程式開發者建立藝術級的圖形使用者介面所需的所用功能。Qt是完全面向物件的很容易擴充套件,並且 允許真正地元件程式設計。 (一)首先我們來講下我們安裝qt的原因: 我們平常在編寫程式用的最多的是什麼? 也許你會答些程式碼,這個當然是,但是有一個很重要的東西是 使用#include 我們為什麼使用include,因為我們想使用printf,fork,malloc等這些函式,其實說白了就是使用別人寫好的東西,一減少自己的程式碼量,這就是庫的作用。其實我們安裝qt其實就是安裝庫及標頭檔案。當然如果我們想要更好的開發環境,就會希望有像vc那種視覺化的開發工具,這些都是qt安裝時生成,這也是為什麼需要安裝qt的原因。 (二)下面就進一步講下一些概念:首先讓我們來了解下一些概念: qt-x11 qt-embeded qtopia qt由於是跨平臺的,故其能夠在linux,window,mac等作業系統下執行。既然是跨平臺的,它就要將GUI分層,分成和平臺相關的,及同平臺無關的,所以當我們要安裝qt時,就要針對具體平臺下載具體平臺的qt. 在Linux,由於Linux廣泛使用的是xwindow協議,所以qt-x11也要依賴xwindowx,這樣當我們要在linuxpc上安裝qt時,就要有xlib的想關庫,可能也也許會說ubuntu的桌面是gnome,而gnome是基於gtk,而gtk又是在glib上擴充套件,glib又是xlib封裝,那ubuntu應該就有xlib的相關庫了吧,非也,glib是glib,xlib是xlib,他們的介面都不一樣,你讓qt在呢麼使用xwindow的相關東西,也許你還會說那為啥qt不直接使用glib,而是使用xlib,其實這個很好理解,因為qt其實是和gtk等價的東西,你讓他 gtk使用一樣的繼承關係glib,那未免不好,再說xlib是最基本的基礎,用他可以更好的實現跨平臺,否則,就算是在Linux下,如果一個用gtk,一個用xwindox,那麼qt都要進行改動。 Qt-embeded大家光看單詞就可看出是指嵌入式qt,其實說是嵌入式,也說大了,只能說是主要針對具有framebuffer的嵌入式作業系統,如果是其他作業系統,你要修改的東西就多了去了,那還不若使用小一點的gui,像minigui等,既然提到framebuffer,大家也查到了,如果再縮小範圍,其實這個所謂的嵌入式就是指嵌入式中的linux,他為什麼要分出個pc linux及嵌入式linux版本,主要是因為嵌入式系統中資源有限,使用framebuffer更能有效使用資源,且開發簡單很多,既然使用的是framebuffer,它也就沒使用xlib了,因為xwindow當初就是為了適用一臺伺服器,多個終端,然後通過客戶視窗通過網路同伺服器視窗通訊並被管理,這個在嵌入式系統中根本用不上,所以就沒使用xlib,當然可能還有很多其他原因,但是此版本自己實現的視窗管理系統還是使用c/s模式。 Qtopia又是什麼呢?qtopia其實可以看成是qt-embedded的擴充套件,他主要是實現了一個桌面,使得應用程式設計師開發更簡單,同時也增加了一些元件。如果你使用qt開發一個桌面系統,你就要寫一個應用程式,這個應用程式要實現像工作列,桌面圖示,ime像輸入法頂層視窗,及應用管理的這些功能。而這些在qtopia中,他已經幫你實現了,你要做得是開發具體的應用程式,這樣就為我們減少了很大的任務量。(三)下面就進入qt安裝。 (1)首先安裝x11。 剛才說了x11版本使用的是xlib底層窗體機制,只要我們將x11編譯完了,我們就可以直接些程式,執行。 PC所用 Linux系統版本:Ubuntu8.04 首先下載: Qt/Embedded版本:qt- embedded-linux-opensource-src-4.4.3 Qt/X11版本:qt-x11-opensource-src-4.4.3 然後解壓: tar zxvf qt-x11-opensource-src-4.4.3 -C ~/opt/qt cd ~/opt/qt 剛才說到在linux pc上的qt是基於xlib所以要保證xlib庫的存在,如果不存在使用sudo apt-get install libx11-dev 下載xlib庫,同時我在編譯的過程中也發現還需要xext庫,也將他下載sudo apt-get install libxext-dev反正是在編譯的過程中,發現什麼錯誤,就看下,如果是缺少庫,下載就是了。然後配置。由於是編譯在pc上執行的庫,配置非常簡單 1 ./configure -prefix ~/opt/run/qt 2 make 3 make install 第1條命令是做啥用的呢,他其實就是生成makefile檔案,及生成用來編譯qt原始碼用的一些工具,象qmake,qmake是用來解釋.pro檔案,然後生成makefile檔案的,其實他的作用像automake,就是自動生成makefile檔案。 第二條命令就是生成lib,及其他工具像designer,uic,等工具的 make install就是將lib,tool,doc複製到-prefix指定的資料夾。 2 make過程非常長,大概1-2小時,此時可以看看網頁或出去玩下。然後我們就可以測試了。首先我們要新增環境變數,我們新建一個檔案用來新增這些環境變數。

[email protected]:~/opt/run/qt$ cat setenv.sh export QTDIR=$HOME/opt/run/qt //使的qmake生成makefile知道include,lib的 路徑,同時還有mkspecs規則 export QTDEDIR=$QTDIR export PATH=$QTDIR/bin:$PATH //這使得qmake,uci等工具能夠直接使用,而不用進入: ~/opt/run/qte export LD_LIBRARY_PAHT=$QTDIR/lib:$LD_LIBRARY_PAHT //這個使得載入程式是能夠正確找到qt庫 [email protected]
:~/opt/run/qt$ source setenv.sh //source的作用是使得上面的設定生效。上面的註釋不在setenv.sh檔案裡,這裡只是為了說明。然後自己寫個簡單的程式。 1.#include 2 #include 3 int main( int argc, char **argv ) 4 { 5 QApplication a( argc, argv ); 6 QPushButton hello( "Hello world!", 0 ); 7 hello.resize( 100, 30 ); 9 hello.show(); 10 return a.exec(); 11 } [email protected]
:~/test/cppd$ ls testb test.cpp [email protected]:~/test/cppd$ qmake -project [email protected]:~/test/cppd$ ls cppd.pro testb test.cpp [email protected]:~/test/cppd$ qmake [email protected]:~/test/cppd$ ls cppd.pro Makefile testb test.cpp [email protected]:~/test/cppd$ make g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../opt/run/qt/mkspecs/linux-g++ -I. -I../../opt/run/qt/include/QtCore -I../../opt/run/qt/include/QtCore -I../../opt/run/qt/include/QtGui -I../../opt/run/qt/include/QtGui -I../../opt/run/qt/include -I. -I. -I. -o test.o test.cpp g++ -Wl,-rpath,/home/jimmy/opt/run/qt/lib -o cppd test.o -L/home/jimmy/opt/run/qt/lib -lQtGui -L/home/jimmy/opt/run/qt/lib -L/usr/X11R6/lib -lXext -lX11 -lQtCore -lm -lrt -ldl -lpthread [email protected]:~/test/cppd$ ls cppd cppd.pro Makefile testb test.cpp test.o [email protected]:~/test/cppd$ .cppd [img]http://blogimg.chinaunix.net/blog/upfile2/090513182315.jpg[/img] 然後編譯: qt-embedded版本 過程一樣:只是configure要變我們首先編譯一個在仿framebuffer的版本,即生成的程式碼是針對pc的,用qvfb來模仿framebuffer,達到在宿機上開發目標機的程式並除錯,這樣當在宿機上執行成功時,再用交叉編譯工具重新編譯即可。 .configure -prefix ~/run/qte -embedded x86 -qvfb 這樣這個版本的qt就是以qvfb作為自己的顯示裝置。 然後make,make install 同樣我麼除錯,由於這次我們要是使用qt/embedded,所以就要使用qt/embedded的庫,其實只需修改 QTDIR等環境變數即可。 [email protected]:~/opt/run/qte$ cat setenv.sh export QTDIR=$HOME/opt/run/qte //使的qmake生成makefile知道include,lib的 路徑,同時還有mkspecs規則 export QTDEDIR=$QTDIR export PATH=$QTDIR/bin:$PATH //這使得qmake,uci等工具能夠直接使用,而不用進入 ~/opt/run/qte export LD_LIBRARY_PAHT=$QTDIR/lib:$LD_LIBRARY_PAHT //這個使得載入程式是能夠正確找到qt庫 [email protected]:~/opt/run/qte$ source setenv.sh //source的作用是使得上面的設定生效。 x11時上面的目錄是qt,現在是qte了。然後我們再進入test目錄,編譯test.cpp [email protected]:~/test/cppd$ make clean rm -f test.o rm -f *~ core *.core [email protected]:~/test/cppd$ make g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I../../opt/run/qte/mkspecs/qws/linux-x86-g++ -I. -I../../opt/run/qte/include/QtCore -I../../opt/run/qte/include/QtCore -I../../opt/run/qte/include/QtNetwork -I../../opt/run/qte/include/QtNetwork -I../../opt/run/qte/include/QtGui -I../../opt/run/qte/include/QtGui -I../../opt/run/qte/include -I. -I. -I. -o test.o test.cpp g++ -Wl,-rpath,/home/jimmy/opt/run/qte/lib -o cppd test.o -L/home/jimmy/opt/run/qte/lib -lQtGui -L/home/jimmy/opt/run/qte/lib -lQtNetwork -lQtCore -lm -lrt -ldl -lpthread [email protected]:~/test/cppd$ ./cppd QWSSocket::connectToLocalFile could not connect:: 沒有該檔案或目錄 QWSSocket::connectToLocalFile could not connect:: 沒有該檔案或目錄 QWSSocket::connectToLocalFile could not connect:: 沒有該檔案或目錄 QWSSocket::connectToLocalFile could not connect:: 沒有該檔案或目錄 QWSSocket::connectToLocalFile could not connect:: 沒有該檔案或目錄 [email protected]:~/test/cppd$ 這時執行./cppd出錯了,為什麼,這就要提到我們前面說的,embedded版本下的qt也是採用c/s模式,所以必須要有server,由於沒有server就出現了上面的錯誤,這時可能會問那為什麼x11版本下沒有server就可以執行呢。其實x11版本下也是有server,因為我們的pc linux gnome桌面系統也是基於xwindow的,所以在啟動時就啟動xwindow的伺服器,這個就是X,正因為有了這個Xserver,x11版本下執行./cppd就可以了。 [email protected]:~$ ps -aux |grep X Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html root 5902 5.2 4.9 109168 100060 tty7 Rs+ 08:50 3:56 /usr/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7 jimmy 9182 0.0 0.0 3224 796 pts/5 S+ 10:05 0:00 grep X [email protected]:~$ 如果此時你sudo kill 5902,你將發現整個視窗程式沒用了。那這個問題怎麼解決呢,很簡單,./cppd -qws,加個-qws就可以,這個是什麼意思,這個就是說告訴qt,這個應用程式同時會作為server,所以會開啟一個server,其原始碼實現是在 QApplication a( argc, argv ); 構建qapplication是建立的,當construct發現引數有qws時就會開啟一個server執行緒執行qwserver類的例項,並初始化。讓我們來看下程式碼實現,由於argv只傳給了qapplication,應該可以看出在qapplication的建構函式裡對argv進行了識別,事實上確實如此。 QApplication::QApplication( int &argc, char **argv ) { construct( argc, argv, GuiClient ); } void QApplication::construct( int &argc, char **argv, Type type ) { qt_appType = type; qt_is_gui_used = (type != Tty); init_precmdline(); static char *empty = (char*)""; if ( argc == 0 || argv == 0 ) { argc = 0; argv = ? } qt_init( &argc, argv, type ); // Must be called before initialize() process_cmdline( &argc, argv ); #if defined(QT_THREAD_SUPPORT) qt_mutex = new QMutex(TRUE); #endif initialize( argc, argv ); } void qt_init( int *argcptr, char **argv, QApplication::Type type ) { ................... else if ( arg == "-qws" ) { type = Qapplication::GuiServer; ................... if ( type == QApplication::GuiServer ) { qt_appType = type; qws_single_process = TRUE; QWSServer::startup(flags);//這個就會建立server setenv("QWS_DISPLAY", qws_display_spec, 0); } } extern QWSServer *qwsServer; //there can be only one 現在讓我們來看下。當然由於我們要使用qvfb模擬framebuffer,當然就要開啟qvfb 這個時候就看到。 [img]http://blogimg.chinaunix.net/blog/upfile2/090513182334.jpg[/img] 還有一點要注意的是:qt4不再有setmainwidget函數了。 下面是交叉版本的編譯: 其實交叉編譯qte是差不多的,只是 ./configure引數不一樣: ./configure -prefix /home/jimmy/opt/run/qt-arm -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license 後面一大堆引數,其實就是為了儘量減少庫的大小,而剪裁了一些不需要的功能。 然後make make install 然後就是應用程式的交叉編譯。 這個時候要首先設定環境變數,這樣 1 export QTDIR=$HOME/opt/run/qt-arm 2 export QTEDIR=$QTDIR 3 export PATH=$QTDIR/bin:$QPEDIR/bin:$PATH 4 export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 然後到新建一個檔案,main.cpp qmake -project qmake make 即了其實在第二步隱藏了一個細節,qmake 等價於qmake -spec default,這個spec引數就是到mkspecs資料夾找配置檔案。 [email protected]:~/opt/run/qt-arm$ ls bin include lib mkspecs plugins setenv.sh tmake translations [email protected]:~/opt/run/qt-arm$ cd mkspecs [email protected]:~/opt/run/qt-arm/mkspecs$ ls -l 總用量 336 drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 aix-g++ drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 aix-g++-64 drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 aix-xlc drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 aix-xlc-64 drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 common drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 cygwin-g++ drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 darwin-g++ lrwxrwxrwx 1 jimmy jimmy 17 2009-05-05 15:28 default -> qws/linux-arm-g++ drwxr-xr-x 5 jimmy jimmy 4096 2009-05-05 15:28 features drwxr-xr-x 2 jimmy jimmy 4096 2009-05-05 15:28 freebsd-g++ 也就是說default其實是使用linux-arm-g++ [email protected]:~/opt/run/qt-arm/mkspecs$ cd qws/linux-arm-g++/ [email protected]:~/opt/run/qt-arm/mkspecs/qws/linux-arm-g++$ ls qmake.conf qplatformdefs.h [email protected]:~/opt/run/qt-arm/mkspecs/qws/linux-arm-g++$ cat qmake.conf # # qmake configuration for linux-g++ using the arm-linux-g++ crosscompiler # MAKEFILE_GENERATOR = UNIX TEMPLATE = app CONFIG += qt warn_on release link_prl QT += core gui network QMAKE_INCREMENTAL_STYLE = sublib QMAKE_CC = arm-linux-gcc QMAKE_LEX = flex QMAKE_LEXFLAGS = QMAKE_YACC = yacc QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -pipe QMAKE_CFLAGS_WARN_ON = -Wall -W QMAKE_CFLAGS_WARN_OFF = QMAKE_CFLAGS_RELEASE = -O2 QMAKE_CFLAGS_DEBUG = -g QMAKE_CFLAGS_SHLIB = -fPIC QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CFLAGS_THREAD = -D_REENTRANT QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden QMAKE_CXX = arm-linux-g++ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden QMAKE_INCDIR = QMAKE_LIBDIR = QMAKE_INCDIR_X11 = QMAKE_LIBDIR_X11 = QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] QMAKE_INCDIR_OPENGL = QMAKE_LIBDIR_OPENGL = QMAKE_INCDIR_QTOPIA = $(QPEDIR)/include QMAKE_LIBDIR_QTOPIA = $(QPEDIR)/lib QMAKE_LINK = arm-linux-g++ QMAKE_LINK_SHLIB = arm-linux-g++ QMAKE_LFLAGS = QMAKE_LFLAGS_RELEASE = QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_SHLIB = -shared QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_SONAME = -Wl,-soname, QMAKE_LFLAGS_THREAD = QMAKE_RPATH = -Wl,-rpath, QMAKE_LIBS = QMAKE_LIBS_DYNLOAD = -ldl QMAKE_LIBS_X11 = QMAKE_LIBS_X11SM = QMAKE_LIBS_QT = -lqte QMAKE_LIBS_QT_THREAD = -lqte-mt QMAKE_LIBS_QT_OPENGL = -lqgl QMAKE_LIBS_QTOPIA = -lqpe -lqtopia QMAKE_LIBS_THREAD = -lpthread QMAKE_LIBS_OPENGL = QMAKE_MOC = $$[QT_INSTALL_BINS]/moc QMAKE_UIC = $$[QT_INSTALL_BINS]/uic QMAKE_AR = arm-linux-ar cqs QMAKE_OBJCOPY = arm-linux-objcopy QMAKE_RANLIB = arm-linux-ranlib QMAKE_TAR = tar -cf QMAKE_GZIP = gzip -9f QMAKE_COPY = cp -f QMAKE_MOVE = mv -f QMAKE_DEL_FILE = rm -f QMAKE_DEL_DIR = rmdir QMAKE_STRIP = arm-linux-strip QMAKE_CHK_DIR_EXISTS = test -d QMAKE_MKDIR = mkdir -p load(qt_config) [email protected]:~/opt/run/qt-arm/mkspecs/qws/linux-arm-g++$ 由上面可以看出,其實spec就是一些makefile的引數,像編譯器,庫檔案,這樣達到交叉編譯的作用。這樣qmake就可利用這些資訊生成交叉編譯的makefile, 然後我們執行make即可生成針對arm的QT應用程式。下面來開心qtopia的原理:其實qtopia就是一個桌面qt應用程式,但是他擴充套件了一些類,所以,他也有庫,標頭檔案,然後生成的qte利用這些擴充套件的庫實現。我們來看下qtopia的原理;既然他他也是應用程式,那他就有main函式,找到這個函式 int main( int argc, char ** argv ) { int retVal = initApplication( argc, argv ); if ( DesktopApplication::doRestart ) { qDebug("Trying to restart"); execl( (QPEApplication::qpeDir()+"bin//qpe").latin1(), "qpe", 0 ); } return retVal; } 很簡單,其實就一個 initApplication函式 int initApplication( int argc, char ** argv ) { cleanup(); #ifdef QT_QWS_CASSIOPEIA initCassiopeia(); #endif #ifdef QPE_OWNAPM initAPM(); #endif #ifdef QT_DEMO_SINGLE_FLOPPY initFloppy(); #endif initEnvironment(); //Don't flicker at startup: #ifdef QWS QWSServer::setDesktopBackground( QImage() ); #endif ServerApplication a( argc, argv, QApplication::GuiServer );//這個就啟動一個qwserver類,也 就有了伺服器了 refreshTimeZoneConfig(); initBacklight(); initKeyboard(); // Don't use first use under Windows #ifdef Q_OS_UNIX if ( firstUse() ) { a.restart(); return 0; } #endif AlarmServer::initialize(); #if defined(QT_QWS_LOGIN) for( int i=0; i if( strcmp( a.argv()[i], "-login" ) == 0 ) { // No tr QDMDialogImpl::login( ); return 0; } #endif Server *s = new Server();//這個其實就是建立主視窗,桌面視窗,這個類是widget繼承的 (void)new SysFileMonitor(s); #ifdef QWS Network::createServer(s); #endif s->show(); int rv = a.exec(); qDebug("exiting..."); delete s; return rv; } QWSServer::setDesktopBackground( QImage() ); 這個是靜態函式,生成了一個image物件, 和qwsserver(指標,指向qserver物件)一樣,其他檔案以extern qwsserver來使用這些物件,保證了唯一性。網上有很多文章是:在./configure前就指定了 export QTDIR=$PWD/qt 26 export QPEDIR=$PWD/qtopia 29 export PATH=$QTDIR/bin:$QPEDIR/bin:$PATH 這讓人產生錯覺,好像./configure,make過程和上面的環境變數有關,其實沒有關係,因為這個是後是生成Lib,所以不需要指定和qt有關的庫,所以qtdir沒有用, INCPATH = -I../../mkspecs/linux-g++ -I. -I../../include/QtCore -I../../include/QtCore -I../../include -I../../include/QtSql -I.rcc/release-shared -I.moc/release-shared -I.uic/release-shared LINK = g++ 且標頭檔案資料夾都是用相對路徑,所以就不需要這些變數。在應用程式的時候就不一樣,因為這個時候是要使用這些變數,且應用程式和標頭檔案夾的位置沒有太大的關係,這樣就只有用環境變數來指定,這個其實在qmake時,qmake就會使用這些變數來生成makefile 下面來說下使用designer編寫qt程式。首先通過designer會產生一個.ui結尾的檔案,假設是hello.ui 然後 uic -o test.h hello.ui 然後就會生產對應的類。 然後我們編寫程式碼包含這個標頭檔案,就相當於使用了這個類。 [email protected]:~/qt/first$ cat hello.cpp #include #include #include "test.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QDialog *window = new QDialog; Ui::Dialog *form = new Ui::Dialog; form->setupUi(window); window->show(); return app.exec(); } [email protected]:~/qt/first$ Ui::Dialog;就是用designer生成由uic處理後生成的類,然後: qmake -project qmake make就可以瞭如果上面的qmake命令執行失敗,那就是你的環境變數沒有設定好。然後執行

相關推薦

qt移植解惑

Qt是一個多平臺的C++圖形使用者介面應用程式框架。它提供給應用程式開發者建立藝術級的圖形使用者介面所需的所用功能。Qt是完全面向物件的很容易擴充套件,並且 允許真正地元件程式設計。 (一)首先我們來講下我們安裝qt的原因: 我們平常在編寫程式用的最多的是什麼? 也許你會答些

移植QT5.6到嵌入式開發板(史上最詳細的QT移植教程)

文件傳輸 嵌入式環境 ubun 導致 字庫 etc -a led fill 目前網上的大多數 QT 移植教程還都停留在 qt4.8 版本,或者還有更老的 Qtopia ,但是目前 Qt 已經發展到最新的 5.7 版本了,我個人也已經使用了很長一段時間的 qt5.6 for

全志A64 QT移植

1. 把編譯工具 gcc-linaro-aarch64.tar.xz 新增到環境.bashrc 中 2. 下載 tslib-1.4.tar.gz ,libiconv-1.15.tar.gz ,qt-everywhere-opensource-src-5.6.1.tar.gz 3. 由於tslib

QT移植第三方QWT

QWT移植 二、解壓檔案,用QT開啟檔案下的專案檔案;執行qmake和build 三、1.開啟生成的構建目錄(我的是F:\MyDownloads\11)找到文下的qwt_design

Qt移植到開發板上如何使用觸控式螢幕及改變介面大小

 觸控式螢幕: 二、安裝完後,載入觸控式螢幕驅動:insmod ts.ko,然後執行./ts_calibrate 進行五點校準,之後會在/etc/下生成一個檔案 pointercal,要有這個觸控式螢幕才能用。 三、修改/etc/profile:         新增這幾

ARM QT移植詳細步驟教程

米爾SAM9X5和A5D3X上預設的Qt版本是4.5.3,當這個版本的Qt庫不能滿足實際開發需求時,可通過此方法制定Qt開發、執行環境。 移植的步驟如下: 1、下載新版qt; 2、編譯tslib; 3、編譯qt; 4、配置編譯後的qt,以便在主機上用qmake編譯適用目標板

Qt移植到開發板上改變字型的大小

在Qt中經常會涉及到介面字型大小的設定,預設字型一般比較小,特別是在移植到開發板上進行顯示一般都要放大字型,因為開發板上液晶顯示螢幕解析度都是非常的小,跟電腦顯示有很大差別。 一種整體介面字型設定的方法: 在main函式中新增程式:                     

QT移植筆記

1.tslib移植和測試 1.1、tslib移植 (1)原始碼下載 (2)解壓        tar -xvf tslib-1.4.tar.gz (3)配置 # cd tslib # ./autogen.sh # echo "ac_cv_f

Qt移植checkbox風格修改

環境:        HelperA64開發板        Linux3.10核心 時間:2019.01.12 目標:修改Qt中checkbox圖片太小的BUG

TightVNC 2.8.11:(二)TvnViewer的Qt移植

環境 系統:Windows7 64位 旗艦版 Qt版本:5.6.0 msvc2015 64位 編譯器:Visual Studio 2015 專業版 目的 1.提取TightVNC2.8.11中生成TvnViewer的原始碼; 2.用Qt的方式編譯並執

QT移植到hi3536

QT版本:qt-embedded-linux-opensource-src-4.5.3 1、新增交叉編譯 (1)copy qt-embedded-linux-opensource-src-4.5.3/mkspecs/qws/linux-arm-g++ 到 qt-embedd

qt移植輸入法

最近搞了一個組織細胞脫水機專案,當然,對於國內的專案都是仿來仿去的,我們也不例外,開啟被仿機器後,第一個看到的介面就是使用者登入介面,需要輸入中文,作為一個程式設計師,我的第一反應就是我需要採用什麼用的框架來做這個介面,方向是多方面的,肯定會選擇自己熟悉的一個,自然而然,我選擇了QT來做介面,但是QT

Qt移植以及QT creator一鍵除錯

轉載地址:http://home.eeworld.com.cn/home.php?mod=space&uid=722063&do=blog&id=557502 筆者使用的開發板是EVB335(如下圖)1.下載qt和tslib我編譯成功的是qt4.8

QT/Embedded 4.7.0移植新增MySQL外掛

獲取qt-everywhere-opensource-src-4.6.3.tar.gz並解壓,tar -xzvf qt-everywhere-opensource-src-4.6.3.tar.gz 進入src/plugins/sqldrivers/mysql 執行/opt/q

移植OpenCV+QT到ARM S3C6818開發板上(2)

續《移植OpenCV+QT到ARM S3C6818開發板上(1)》 安裝QT開發環境到宿主機 解壓qt5.7.0原始碼(時間稍稍有點長,為待會編譯捏了一把汗啊!) 解壓完之後進入原始碼根目錄,終端輸入: sudo ./configure -v -release

qt-gstreamer外掛的移植安裝及使用

一,安裝環境準備 編譯原始碼依賴環境的準備: 1,gstreamer-1.0 2,Qt5的執行環境(我已經移植的Qt5.9) 二,原始碼編譯 $ tar -xvf  qt-gstreamer-1.2.0.tar.gz  $ cd qt-gstreamer-

Tslib和Qt 4.8.4與在開發板上的移植

Linux:Ubuntu 12.04 X86 QT:4.8.4 交叉編譯工具鏈:gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) 安裝如下的軟體  sudo apt-get install automake sudo a

QT編寫的程式從Windows作業系統中移植到樹莓派中編譯並執行

     開發環境    Win10 + QT5.6  和 樹莓派 1.在Win10中用QT新建一個 Qt  Widgets Application 專案    2 .找到工程目錄 3 .將整個

移植Qt圖形介面應用程式到S3C2440 arm開發板

1.進入qt已經寫好的一個圖形介面應用程式目錄裡,例如,我的應用程式目錄是在/home/czd/qt_project/mp3player/ $ cd /home/czd/qt_project/mp3player/ 發現裡面有個mp3player.pro檔案 我們在上面已配置

Qt 5.5.0-成功移植到TQ210

轉載地址:http://tieba.baidu.com/p/3996410074 一、需要準備的資源下載連結地址: 1、ubuntu-14.04.3-desktop-amd64+mac.iso:http://cdimage.ubuntu.com/releases/2、qt-