http://hi.baidu.com/dsfire/blog/item/716e3f80268175df9123d9b7.html
qt4的安裝-應用程式設計及在arm闆上的移植
本文介紹:qt4在ubuntu8.10下的安裝;QDevelop + QT4 designer的套餐程式設計;将設計的qt4應用程式移植到友善之臂的s3c2440開發闆上!
移植到開發闆上簡單的應用程式為下圖:
點選按鈕輸入6位密碼,然後點選Verify驗證是否正确。若正确則彈出
MessageBox,顯示congregation。若錯誤,彈出的MessageBox顯示Please input again!
這隻是一個簡單的驗證小程式,是以其他的複雜驗證條件沒有考慮!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
費話不多說,要想用QDevelop 和QT4 designer設計應用程式,那麼首先必須先把他們兩裝在pc上。
在ubuntu上裝軟體真的很友善,隻要apt-get 就會幫你搞定了。
在終端中輸入:sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer
這樣,qt-designer就裝到pc上了。
然後裝QDevelop:sudo apt-get install qdevelop
這樣,QDevelop也裝上去了。
這時,點選應用程式--程式設計,就能夠看到QDevelop、QT 4 Linguist 、QT 4 設計器和QT 4 助手!
在我們進行qt應用程式設計時:Qdevelop用來編寫代碼,編譯和調試,Qt Designer用來設計界面,并且可以産生一定的以.h結尾的代碼。兩個配合使用,提高開發效率!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
程式設計:
那麼現在就用他們來進行套餐程式設計的第一個例子。簡單的密碼驗證!設計好的程式界面如上圖,似乎和移植到開發闆上的程式界面不太一樣, 沒關系,現在就開始!
點選應用程式--程式設計--QDevelop
打開QDevelop,然後點選 工程--建立工程,打開建立工程對話框。在模版處選擇:帶對話框的工程。屬性的位置處:本例選擇/work/check/,工程名為check。其他預設即可!點選确定,回到QDevelop主界面。這樣check的工程檔案及一些代碼就建立成功了,在左面就可以看到下圖資訊!
右鍵單擊ui/dialog.ui(或輕按兩下),選擇在Designer中打開。
現在在視窗最前面的應該是“建立窗體”對話框,點選“關閉”(因為咱們的視窗界面已經有了,就是 dialog.ui)。是不是感覺很亂,太多了。将動作編輯器啦,對象編輯器啦,等等,不用的都關掉。将屬性編輯器留着。
先清理一下咱們dianlog.ui界面裡的内容,将Remove this widget and insert your own widgets還有下面的按鈕全删了,現在幹淨了。
1、點選Dialog,在屬性編輯器,将objectName後面的三個問号???改為check。下面的windowTitle改為密碼驗證。
2、點選左邊的Line Edit拖拽到對話框(就是咱們的窗體)中,一開始它的objectName為lineEdit,這個控件不做修改。
3、點選左邊的lable拖拽到對話框中,objectName屬性改為lable1,text屬性改為Please input password!
4、點選左邊的Push Button拖拽到對話框中,将objectName屬性改為zer,text屬性改為0。
再拖拽8個來分别将它們的text屬性改為1到9,而且将它們的objectName屬性分别改為對應數字英文翻譯的前三個字母。這裡隻是為了便于記憶,随你了。比如說1的objectName為one,8的objectName為eig!
5、然後在推拽三個Push Button按鈕,設定如下
1 | 2 | 3 | |
objectName | verify | clean | cancel |
text | &Verify | &Clean | &Cancel |
經過調整之後,界面就是上面那幅圖了。
6、點選編輯--編輯Tab順序,将line Edit設為1。當程式運作時,光标就落在line Edit上了!
下面開始進行信号和槽的編輯。
信号(signal):就是一個控件可進行的操作,比如說一個按鈕你可以對它單擊,輕按兩下等等,單擊或輕按兩下這些就是信号。
槽(slot):就是當你發出了一個信号,比如說你clicked了一個按鈕,你想在單擊之後讓line Edit的内容設為空,那麼就可以将按鈕的clicked()和lineEdit的clear( )槽綁定起來。槽可以是應用程式裡的标準的函數,也可以是自己編寫的。
7、增加槽:在視窗空白處右擊--改變信号/槽,打開了“check的信号/槽”,點選槽下面的“+”号,增加後的槽如圖,共11個!
8、按F4(或編輯--編輯信号/槽),拖拽Clean按鈕到line Edit上,松開滑鼠,就打開了“配置連接配接”在clean (QpushButton)中選擇clicked(),lineEdit (QlineEdit)中選擇clear();這樣按鈕clean的clicked()信号就和lineEdit的clear()槽連接配接起來了。程式運作時,單擊clean,lineEdit的内容就被清空!
9、添加其它按鈕信号和槽的連接配接。(用8的步驟一一連接配接也可以)單擊工具--信号/槽編輯器。打開信号/槽編輯器。單擊+号就可以添加信号和槽的連接配接。最後設定完成後,如圖:
到此為止,qt的界面設定已經完成。單擊儲存。
單擊窗體--預覽,剛才所做的都呈現出來了,但隻有按鈕Clean和Cancle起作用,因為其它按鈕的槽是咱們自己添加的,還沒有代碼。
轉下篇http://hi.baidu.com/dsfire/blog/item/3afd5e64cc6a02f8f736545b.html
qt4的安裝-應用程式設計及在arm闆上的移植(二) 2009-04-20 08:36
剛才上面所做的9個步驟都可以用指令來寫,但對于初學者來說,需要的是時間。qt的好處,它可以将上面所做的步驟自動的生成代碼。點選窗體--檢視代碼,就可以看到了。當在界面做修改時,代碼也會相應的發生變化。好了,現在就要在QDevlelop裡進行程式設計了。可以将qt designer關掉了!
在QDevlelop裡主要修改的是頭檔案dialogimpl.h和dialogimpl.cpp這兩個檔案。
10、修改dialogimpl.h。将咱們自己添加的槽進行聲明。修改後的dialogimpl.h代碼如下:
#ifndef DIALOGIMPL_H
#define DIALOGIMPL_H
#include <QDialog>
#include "ui_dialog.h"
class DialogImpl : public QDialog, public Ui::check
{
Q_OBJECT
public:
DialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 );
private slots:
void passwdslot();
void addbtname0();
void addbtname1();
void addbtname2();
void addbtname3();
void addbtname4();
void addbtname5();
void addbtname6();
void addbtname7();
void addbtname8();
void addbtname9();
};
#endif
Q_OBJECT的作用,當使用QT中的signal和slot時需要加入。原句:The Q_OBJECT macro at the beginning of the class definition is necessary for all classes that define signals or slots
11、修改dialogimpl.cpp。
修改後的程式代碼:
#include "dialogimpl.h"
#include <QMessageBox>
#include <qstring.h>
DialogImpl::DialogImpl( QWidget * parent, Qt::WFlags f)
: QDialog(parent, f)
{
setupUi(this);
}
//passwdslot()槽的編寫。驗證密碼是不是123456
void DialogImpl::passwdslot()
{
if(lineEdit->text() != "123456")
{
QMessageBox::information( this, "Input Error",
tr("Please input again"));
//第一個參數為消息框的父視窗指針。
//第二個參數為消息框的标題欄。
//第三個參數為消息框的文字提示資訊。
lineEdit->setText("");
lineEdit->setFocus();
return;
}
else
{
QMessageBox::information( this, "Input correct",
tr("congregation!!!"));
return;
}
}
//單擊0到9按鈕時産生的事件。
//用按鈕數組應該不用寫下面那麼多重複的指令。
void DialogImpl::addbtname0()
{ QString add;
add=lineEdit->text()+ zer->text();//add的值等于lineEdit的test和按鈕text的“和”值。
lineEdit->setText(add);//将add的内容添加到lineEdit->text()裡。
lineEdit->setFocus();//将光标設在lineEdit上,可以省掉。
}
void DialogImpl::addbtname1()
{ QString add;
add=lineEdit->text()+ one->text();
lineEdit->setText(add);
lineEdit->setFocus();
}
//..........................
//..........................
//..........................
//..........................
//..........................
//..........................
void DialogImpl::addbtname8()
{ QString add;
add=lineEdit->text()+ eig->text();
lineEdit->setText(add);
lineEdit->setFocus();
}
void DialogImpl::addbtname9()
{ QString add;
add=lineEdit->text()+ nin->text();
lineEdit->setText(add);
lineEdit->setFocus();
}
//
//省略号裡面是addbtname2和addbtname7的代碼,和其它的一樣
12、好了,一切都ok了。點選編譯--編譯(或者按F7)來進行編譯。如果沒有錯誤,
單擊調試--啟動程式,如下圖所示。
輸入123456,點選Verfify,彈出如下視窗。
到此,在pc上的編譯都搞定了,但在work/check/check/bin下面生成的check可執行檔案還不能運作到開發闆上,因為它編譯的環境和所依賴的庫都是源自pc機上的。
轉下篇:http://hi.baidu.com/dsfire/blog/item/73ebb6167c0e344220a4e922.html
在s3c2440上的移植
在QDevelop不知道怎麼樣做修改,才能使所編譯出的程式可直接運作在開發闆上,難道它編譯出的程式隻能運作在pc機上,我想應該不止這樣吧,但确實 還沒有找到在哪裡去修改。在這裡先提醒一下,在QDevelop裡,工具--外部工具 可以選擇qmake的路徑。也許會有什麼用處吧。
我的pc機上也安裝了Qtopia Core OpenSource 4.3.3,在目錄/usr/local/Trolltech/QtopiaCore-4.3.3-arm/bin下,沒錯是4.3.3。然後我将 QDevelop的qmake路徑設為了/usr/local/Trolltech/QtopiaCore-4.3.3-arm/bin/qmake其它 選項都不動。然後重新編譯,編譯通過(但現在又不行了,總是出錯,奇怪,出錯資訊片斷
.......................
.......................
/usr/local/Trolltech/QtopiaCore-4.3.3-arm/lib/libQtGui.so: undefined reference to `QAbstractSocket::error(QAbstractSocket::SocketError)'
/usr/local/Trolltech/QtopiaCore-4.3.3-arm/lib/libQtGui.so: undefined reference to `QTcpServer::errorString() const'
.........................................
.........................................
)
編譯通過後
在/work/check/check/bin下就會有可執行的二進制check檔案。
将它拷貝到/opt/FriendlyARM/mini2440/root_nfs/下qtopia目錄裡,同時将Qtopia Core
OpenSource 4.3.3的庫lib拷貝到/opt/FriendlyARM/mini2440/root_nfs/的qt目錄
裡。/opt/FriendlyARM/mini2440/root_nfs/是開發闆要挂載的目錄,然後将pc機上
的/opt/FriendlyARM/mini2440/root_nfs/目錄挂載到開發闆的/mnt/nfs/目錄下,然後在開發闆裡
輸入:
#export QTDIR=/mnt/nfs/qt
#export QTEDIR=$QTDIR
#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
#cd /mnt/nfs/qtopia
#./check -qws
出現:QFontDatabase: Cannot find font directory /usr/local/Trolltech/QtopiaCore-4.3.3-arm/lib/fonts - is Qt installed correctly?
那你需要做的就是将/mnt/nfs/qt/lib/fonts裡的檔案拷貝到開發闆/usr/local/Trolltech/QtopiaCore-4.3.3-arm/lib/fonts。
再次運作#./check -qws
這時,開發闆上就會出現,咱們最開始的那幅圖檔,輸入密碼試一試,驗證一下。
雖然移植到了開發闆上,但覺得,QDevelop和qt4 designer應該不隻是設計個界面和代碼吧。
看來還需要多多研究啊。
上面說到,在QDevelop裡修改qmake路徑為Qtopia Core OpenSource 4.3.3的qmake時出錯。
于是,将/work/check/check/build裡ui_dialog.h和/work/check/check/src裡面的檔案拷貝到了一
個檔案下,用Qtopia Core OpenSource 4.3.3産生的qmake進行編譯,qmake -project qmake make
ok 沒有出錯,生成的二進制拷貝到開發闆上一樣能用,隻是,這些二進制所依賴的庫lib都是
在Qtopia Core OpenSource 4.3.3生成的lib。(在這裡qmake沒有出錯,但在QDevelop修改
成它的qmake竟然出錯了??????)
pc機上還裝了qt-embedded-linux-opensource-src-4.4.3,在QDevelop裡修改qmake路徑為qt- embedded-linux-opensource-src-4.4.3的qmake,重新編譯,通過。拷貝到開發闆上,運作,
ok!
但不管是用那個生成的二進制,但所依賴的lib是Qtopia Core OpenSource 4.3.3所産生的!
希望看到本文的朋友,給出一些其他的解決辦法,而不是像我這樣的麻煩移植!