1. linux qt 程序 怎樣使用 觸摸屏
只看環境變數不能看出問題, export QWS_MOUSE_PROTO='Tslib:/dev/input/event1' 和 export TSLIB_TSDEVICE='/dev/input/event1' 查看一下該路徑下是否存在名為「event1」的文件,我記得好像是event0
2. 用QT開發ARM和用C語言keil開發ARM孰優孰略
這是一份來自【北航嵌入式培訓中心】的嵌入式linux工程師的課程表,樓主看完之後應該能知道嵌入式linux培訓該學習哪些東西,先學什麼,後學什麼,基本上會有一個框架。
第一階段 合格Linux C程序員階段
課程名稱
課程內容
課時
C語言
基本C語言語法,變數,過程式控制制
C語言簡單參數傳遞,數組和指針概念
基本C語言程序設計實踐初級
專題(1)C和指針
專題(2)C語言的Bug和筆試真題分析
56
(選學)
Linux系統與C語言編程(初、中、高級)
Linux基本操作
Linux下的基本編程方法binutils工具集介紹
Linux下的c語言程序設計和編程習慣
shell程序設計;文件與I/O操作;進程與信號;進程間通信;網路編程
136
數據結構C語言描述
線性表;棧和隊列
數組和廣義表;樹和二叉樹
圖的概念和應用;動態存儲管理
排序和查找的討論
32
C++程序設計
C++程序設計基本概念,類和數據抽象構造和析構函數,函數的二義性討論;函數重載
16
QT程序設計
QT的介紹和開發環境;QT的類和控制項,信號和槽;QT應用實例應用
24
項目實戰:劃艇收費系、數碼相框(PC機)
第二階段 嵌入式Linux C程序員階段
課程名稱
課程內容
課時
ARM體系結構與編程
ARM概述及指令分類、定址方式
ARM指令集精講和匯編語言程序設計ARM存儲系統和中斷、異常處理
基於ARM的介面編程
32
嵌入式Linux系統移植
嵌入式系統概念和開發環境搭建
Boot loader概念和啟動過程分析
U-Boot移植和代碼分析
嵌入式Linux系統移植和編譯
嵌入式Linux系統介面驅動移植
文件系統的概念和根文件系統的製作
48
QT移植
QT編譯和應用庫的製作
QT移植和應用程序編程
16
第三階段 嵌入式Linux C驅動工程師階段
課程名稱
課程內容
課時
嵌入式Linux系統設備驅動程序開發(初級)
Linux設備驅動的概念和開發過程
Linux設備驅動中的機制和策略
Linux設備驅動模型和高級同步機制
嵌入式Linux介面驅動工程實踐
48
項目實戰:視頻監控系統
第四階段 嵌入式Linux工程師階段
課程名稱
課程內容
課時
嵌入式Linux系統設備驅動程序開發(高級)
觸摸屏驅動研究與開發實踐
MTD設備驅動研究與開發實踐
Frame Buffer和LCD驅動研究與實踐
網路設備驅動研究與開發實踐
SD卡驅動研究與開發實踐
USB設備驅動與開發實踐
48
工程實踐項目(根據課程進度安排項目):
GPRS遠程網路視頻監控系統/數碼相框(開發板)
智能家居系統
簡易POS機系統
車載娛樂終端
補充:
二、萬事開頭難,找准了方法,一直堅持,一定會學好的,加油!
3. Qt Mobility 與Qt4.7中的Qt Declarative、QML有什麼關系我要做觸摸屏界面的話,應該用Qt Mobility還是Qt
QML是一種腳本標准,做界面不錯的,可是它需要Qt Declarative模塊才能嵌入到程序中使用,而Qt Mobility是QT中為移動設備集成的開發庫,包含了控制手機等設備中通訊錄,網路,簡訊息等功能的模塊!如果做界面,推薦用QML,不過內核部分一定會用其他的模塊。MeeGo是新的操作系統,它支持Qt,可是並不是它所有的東西都是QT做的~ 謝謝~
4. 求Qt高手 我需要一個判斷觸摸屏是否被使用,不使用則關閉背光的程序。
滑鼠事件,加定時器,如果滑鼠移動,則定時器重新開始,定時器超時,則背光滑鼠移動,關閉背光,還有就是設置嵌入式的一些東西,QWS之類的,不過既然能用到觸摸屏上了,滑鼠設置的應該已經完成了。
5. 如何讓QT編譯器顯示游標
1 PC版本
在終端中輸入:sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer qt4-qmlviewer
◆qt4-dev-tools 中包括了Qt Assistant,Qt Linguist,Qt Creator
◆qt4-doc 這個是幫助文檔
◆qt4-qtconfig Qt的配置工具,這個裝好默認好
◆qt4-demos 官方的一些Demo
◆qt4-designer 可視化窗體設置工具
◆qt4-qmlviewer 和qtcreator相關
安裝後,沒有安裝Qt Creator,在Ubuntu 圖形桌面上點擊左側的Ubuntu Software Center,搜索Qt ,選擇Qt Creator
完成後,在terminal命令行執行命令 qtcreator啟動Qt Creator了
註:如果需要編譯特定版本的,如4.8.5,則:
(1) 安裝一些依賴包
sudo apt-get install libX11-dev libXext-dev libXtst-dev
(2) 下載Qt源碼包 qt-everywhere-opensource-src-4.8.5.tar.gz,解壓後進入目錄
用命令 sudo ./configure -prefix /usr/local/Trolltech/Qt-4.8.5;sudo make;sudo make install即可
2 ARM版本
註:以下所使用的交叉編譯工具為arm-none-linux-gnueabi 如果使用arm-linux 做相應的修改即可
(1)下載Qt源碼包 qt-everywhere-opensource-src-4.8.5.tar.gz;
(2) 解壓後進入該文件夾,執行.
./configure -opensource -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -no-webkit -qt-libtiff -qt-libmng -qt-libjpeg -qt-libpng -no-qt3support -nomake demos -nomake docs -nomake examples -little-endian -host-little-endian -fast -lrt
(3) 執行make,及make install命令,一般時間比較長
(4) 完成後修改mkspecs文件的許可權,供qt creator使用: sudo chmod 775 mkspecs -R
(5) 配置qt creator:工具->選項->Qt4 找到「手動設置」增加一個,qmake路徑填第二步中的安裝目錄下的qmake路徑,」usr/local/Trolltech/QtEmbedded-4.8.5-arm/bin/qmake「
(6)配置完成後,打開項目後點左側「項目」,選擇剛才配置的Qt版本即可編譯生成arm版程序了
3 移植到ARM
(1)需要將usr/local/Trolltech/QtEmbedded-4.8.5-arm/lib移植到ARM板上相同的位置,將plugins里的.so也移入..../QtEmbedded-4.8.5-arm/lib
(2) 對(1)中的lib/下的.so做鏈接
ln -s libQtDeclarative.so.4.8.5 libQtDeclarative.so
ln -s libQtDeclarative.so.4.8.5 libQtDeclarative.so.4
ln -s libQtDeclarative.so.4.8.5 libQtDeclarative.so.4.8
ln -s libQtGui.so.4.8.5 libQtGui.so
ln -s libQtGui.so.4.8.5 libQtGui.so.4
ln -s libQtGui.so.4.8.5 libQtGui.so.4.8
......
註:(1)(2) 也可以用壓縮打包整個lib,拷貝過去來實現
(3)vi ~/.bashrc 文件,加入
QTDIR=usr/local/Trolltech/QtEmbedded-4.8.5-arm
export QTDIR
PATH=$QTDIR/lib:$PATH
export PATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
4 一些常見錯誤
(1) 「QMAKESPEC has not been set」,解決方案:sudo gedit ~/.bashrc ,添加內容:export QMAKESPEC=usr/local/Trolltech/QtEmbedded-4.8.5-arm/mkspecs/qws/linux-arm-gnueabi-g++
(2) 安裝了多種版本的QT,如果想默認使用QtEmbeddedb版本,可以在上述文件中加入:export PATH=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin:$PATH
(3) 配置完成後,可使用qmake -project;qmake;make進行工程編譯
(4) arm開發板的終端打不開,出現"grantpt failed:..."問題,可以輸入:mount -o remount,gid=5,mode=620 /dev/pts 回車
(5) Qtcreator配置出現,沒有編譯鏈,則可加入GCCE編譯鏈,目標位置就是linux-none-arm-guneabi-g++所在位置
(6) 出現qmlviewer 沒有安裝的問題,可從/usr/bin里將qml開頭的三個可執行文件拷到usr/local/Trolltech/QtEmbedded-4.8.5-arm/bin下
(7) make 出現arm-none-linux-gnueabi-g++命令未找到,如果確定環境變數已經添加,則檢查文件所屬賬號是不是你現在賬戶;環境變數如果一直不對,可以關掉終端,新開一個,重新設置
(8) 如果開發板運行程序的時候出現 cannot mix incompatible Qt library with this library,查找資料,大家都說最可行性的解決方案是卸干凈,重新編譯,自己花了好長時間重新編譯後,發現還是一樣。然後用ldd <filename> 查看了運行文件依賴的庫,發現程序有部分鏈接到了開發板上的Qt庫。做了Qt動態庫的全部ln(具體見第3部分)
//////////////////////////////////////////////////////////////////////////////////////////////////////由於項目需要,需要加入觸屏,編譯過程中發現不同與之前的新的問題,記錄如下
一 觸屏庫tslib的編譯
1 下載相應的工具
do apt-get install automake
sudo apt-get install autogen
sudo apt-get install autoconf
sudo apt-get install libtool
2 很重要的一步,設置 CC和CXX
export CC=.... ,export CXX=...,一般CC=arm-linux-gcc ,CXX=arm-linux-g++,我的交叉編譯環境是arm-none-linux-gnueabi-gcc,arm-none-linux-gnueabi-g++,輸入命令 export CC=arm-none-linux-gnueabi-gcc export CXX=arm-none-linux-gnueabi-g++
3 編譯
cd tslib
./autogen.shecho "ac_cv_func_malloc_0_nonnull=yes" > arm-none-linux-gnueabi.cache #(這樣做到目的是避免出現undefined reference to rpl_malloc錯誤)./configure --host=arm-none-linux-gnueabi CC=<你的cc編譯器所在路徑> CXX=<你的++編譯器所在路徑> --cache-file=arm-none-linux-gnueabi.cache -prefix=/usr/local/tslibmakemake install
4 檢查,可進入/usr/local/tslib/bin 里,file ts_test(或其他文件) 如果顯示ARM,表明編譯正確,如果顯示80386表明你用的不是交叉編譯器,而是系統的gcc。註:因為版本不一致,導致編譯QT時一直出現 fail to find tslib function...,加入-verbose選項,列印出/opt/../ld:cannot find -lts(tslib和qt編譯器版本不對應造成)。
二 編譯QTe 4.8.5
1 編譯指令需要改為./configure -opensource -embedded arm -xplatform qws/linux-arm-gnueabi-g++ -no-webkit -qt-libtiff -qt-libmng -qt-libjpeg -qt-libpng -no-qt3support -nomake demos -nomake docs -nomake examples -little-endian -host-little-endian -no-xcursor -no-mouse-linuxtp -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib -fast -lrt
不需要滑鼠的話就加上綠色的文字,並且修改./src/gui/embedded/qwscursor_qws.h,在文件頭部加上#define QT_NO_QWS_CURSOR
2 編譯器最好在qws/linux-arm-gnueabi-g++/qmake.conf中指定完全的路徑,否則可能出現一些奇怪的錯誤。
3 qmake.conf中記得加入-lts 在g++ gcc後面
三 移植到開發板
如果開發板中沒有tslib庫,則需要進行移植1 將tslib庫拷到開發板 /usr/local/tslib2 修改ts.conf vi /usr/local/tslib/etc/ts.conf -》將#mole_raw input前的#去掉3 vi /etc/profile 添加export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event1
export QWS_MOUSE_PROTO=tslib:/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none #避免出現「open console device: No such file or directory KDSETMODE: Bad file descriptor」的錯誤
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/libTSLIB_TSDEVICE 和QWS_MOUSE_PROTO這兩項需要查看自己的板子的觸摸屏設備對應/dev/input/下哪個文件可用cat /proc/bus/input/devices查看具體可參考博客http://blog.163.com/zhuandi_h/blog/static/180270288201222310291262/
頂
1
6. Qt怎樣獲取觸控屏上的多個觸摸點的各個坐標!
沒做過,但是以我的思路大概可以有這個做法,qt在同一個界面 press/click 事件是線性的,也就是一個點一個點來的,所以要判斷多點觸控建議同時判斷 時間和空間
首先兩個點的時間間隔必須小於 5ms(QT毫秒級響應會有1-2個ms的誤差,開發環境win10/5.9.5),然後兩個點的距離必須大於多少個像素(這個自己定),這樣就可以知道是不是多點觸控
7. tq2440怎麼移植qt應用程序
您好,cd qt-4.6.3-x11
sourc qt_x11_setenv.sh
打開qtcreator,建立一個工程假設為form,完成後可以在虛擬機看下做的界面.
進入剛才建立的工程目錄,
qmake -project
qmake
make
./form
就可以看到界面了
----------------------------------------------------------------------------------------------------
接下去是移植到開發板.
1. 把剛才做的界面源碼復制到qt-4.6.3-arm
cd opt/qt-4.6.3-arm
source qt_arm_setenv.sh //因為要用到arm版的qmake, 環境變數要重新設置
qmake -project
qmake
make
./form
此時會提示錯誤打不開,是正常的,這是在arm板上運行的
2. 啟動開發板,在根目錄下建立tq2440和tslib 2個文件夾
//這里貌似QTDIR的路徑要與電腦上一致,不然移植字體不識別,就是要把fedora10 系統的 usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib 復制到ARM的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib
mkdir tq2440
mkdr tslib
把fedora10 系統里的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib 整個lb文件夾拷到開發板/tq2440下
把tslib1.4.tar.gz 安裝生成的tslib文件夾內容拷到開發板上/tslib
//tslib1.4的安裝這里不贅述了,網上找個都沒什麼問題
現在,我們可以在開發板根目錄看到tq2440和tslib這2個文件夾.
tq2440下有lib文件夾,tslib文件夾下有bin include etc lib 4個文件夾.
網上拷貝這些文件多是搭建nfs伺服器做的,我是在虛擬機直接把這些文件夾打包(tar zcvf xx.tar.gz xx),共享傳給我我的主機,然後主機通過secureCRT下載到開發板,就免去了搭nfs.
3. 在開發板的 /etc/profile中追加:
export QTDIR=/tq2440
export T_ROOT=/tslib
export PATH=$QTDIR/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_MOUSE_PROTO=tslib:/dev/event0
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
這里需要注意3句代碼:
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
export QWS_MOUSE_PROTO=tslib:/dev/event0
有的開發板fb0 event0是在/dev/input/目錄下的
所以要改為
export TSLIB_FBDEVICE=/dev/input/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export QWS_MOUSE_PROTO=tslib:/dev/input/event0
再執行一下:source /etc/profile 使系統更新一遍剛設置的系統環境變數.
驗證變數設置是否成功,在開發板終端下執行
echo $QTDIR
如果顯示/tq2440,則說明設置成功了
4 接下來我們還得設置一下觸摸屏的配置文件ts.conf.
它在哪裡呢?前面我們已經拷到開發板/tslib/下,那麼tslib一共就有bin etc include lib 4個目錄,而ts.conf就在etc目錄下,開發板下用
vi /tslib/etc/ts.conf
把# mole_raw input
前面的「#」號去掉,然後把該行移至行首
現在差不多移植完成了,可以把自己用qtcreator寫的程序下載到板子運行.
我是在板子目錄下新建mkdir test文件夾
上文已經說到已經把qtcreator做的界面編譯成arm版的了,現在把這個可執行文件form下載到開發板/test目錄下
在開發板執行:
cd /test
chmod a+x form //提示許可權錯誤就加這句,沒有提示加不加無所謂
./form -qws
會出現「relocation error: /usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbol powf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 with link time reference」錯誤
我的解決辦法是進入主機/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目錄下找到libstdc++.so.6鏈接的文件(通過右鍵屬性——〉基本,可以看到鏈接的文件)libstdc++.so.6.0.8,重命名為libstdc++.so.6復制下載到開發板/tq2440/lib/目錄下,之前別忘了將該文件夾下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。
*重命名其實是比較野蠻的方法,可以用ln命令的,參照下面這篇文章……
http://hi..com/a263238386/blog/item/362f01ce7b11a10a93457eae.html
然後再運行./form –qws,看問題是不是解決了!
現在可以看到開發板界面出現自己qt寫的界面了
5. 不過觸摸屏還沒有校準,進入開發板根目錄/tslib
cd bin
./ts_calibrate //觸摸屏校準程序
運行該程序,屏幕出現5點校準畫面,依次點擊,將生成觸摸屏校準數據文件/etc/pointercal
./ts_test //觸摸屏拖曳測試程序
可以用這個來測試校準的怎麼樣
6. 開機自動啟動qt 程序
如果想在開機後直接運行自己編的qt程序,而不想出現qt自帶的那個界面只需把/etc/init.d/rcS中的
/bin/qtopia & 注釋掉,前面加個#號就行:
#/bin/qtopia &
並在下面加上自己的啟動程序
/tq2440/run.sh &
//添加一個執行腳本行,這個腳本因為在/etc/init.d/rcS中,所以會被自動運行(注意後面最好有個&,使他在後台執行,否則無法通過串口操作控制台)
修改echo "Starting Qtopia, please waiting..." > /dev/tty1
為echo "Starting myapps, please waiting..." > /dev/tty1
然後在/tq2440/目錄下建立一個run.sh文件,內容如下:
#! /bin/sh
export QTDIR=/tq2440
export T_ROOT=/tslib
export PATH=$QTDIR/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0 //這邊可能有的開發板是export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QWS_MOUSE_PROTO=tslib:/dev/event0 //同上,可能在/dev/input/event0
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
/test/form -qws
重啟之後,就可以看見自己添加的qt程序開機自動運行,並且我們可以正常使用觸屏。原理就是qt程序依賴很多的動態共享庫,在運行的時候必須找到這個共享庫,所以在運行qt程序之前必須顯式地指明這些共享庫的所在位置。
8. QT按鈕點擊事件(ARM觸摸屏)
我們最近也是QT的程序在觸摸屏ARM版上跑,沒有出現你這種問題。
click事件需要按下並且釋放兩個動作才會觸發,按照樓主的描述,就是沒有偵測到釋放這個動作
我猜測可能的原因有三種:
1、觸摸屏損壞,當我們按下的時候,觸摸屏偵測到了,釋放的時候卻沒有偵測到
2、觸摸屏驅動的原因,釋放的時候觸摸屏偵測到了,但是觸摸屏驅動沒有把這個信號傳給系統,所以系統也不知道已經釋放了
3、軟體邏輯的原因(這個可能比較小了),軟體監聽了按鈕按下的信號,當按鈕按下時(還沒松開)去做某件事,導致主線程阻塞了,
所以按鈕暫時沒有被主線程釋放(置為彈出狀態)
9. 用Qt Creator設計好了界面 怎麼編寫程序打開音樂和圖片
您好,我也想問一下,已經編寫好了一個程序,假設為520.c,該程序能正確運行,現在想設計一個界面,在該界面添加一個按鈕,點擊該按鈕就能運行以前編寫好的520.c程序,請問怎麼實現?