天天看點

qt4的安裝-應用程式設計及在arm闆上的移植

http://hi.baidu.com/dsfire/blog/item/716e3f80268175df9123d9b7.html

qt4的安裝-應用程式設計及在arm闆上的移植

本文介紹:qt4在ubuntu8.10下的安裝;QDevelop + QT4 designer的套餐程式設計;将設計的qt4應用程式移植到友善之臂的s3c2440開發闆上!

移植到開發闆上簡單的應用程式為下圖:

qt4的安裝-應用程式設計及在arm闆上的移植

點選按鈕輸入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結尾的代碼。兩個配合使用,提高開發效率!

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

qt4的安裝-應用程式設計及在arm闆上的移植

程式設計:

那麼現在就用他們來進行套餐程式設計的第一個例子。簡單的密碼驗證!設計好的程式界面如上圖,似乎和移植到開發闆上的程式界面不太一樣, 沒關系,現在就開始!

點選應用程式--程式設計--QDevelop

打開QDevelop,然後點選 工程--建立工程,打開建立工程對話框。在模版處選擇:帶對話框的工程。屬性的位置處:本例選擇/work/check/,工程名為check。其他預設即可!點選确定,回到QDevelop主界面。這樣check的工程檔案及一些代碼就建立成功了,在左面就可以看到下圖資訊!

qt4的安裝-應用程式設計及在arm闆上的移植

右鍵單擊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個!

qt4的安裝-應用程式設計及在arm闆上的移植

8、按F4(或編輯--編輯信号/槽),拖拽Clean按鈕到line Edit上,松開滑鼠,就打開了“配置連接配接”在clean (QpushButton)中選擇clicked(),lineEdit (QlineEdit)中選擇clear();這樣按鈕clean的clicked()信号就和lineEdit的clear()槽連接配接起來了。程式運作時,單擊clean,lineEdit的内容就被清空!

9、添加其它按鈕信号和槽的連接配接。(用8的步驟一一連接配接也可以)單擊工具--信号/槽編輯器。打開信号/槽編輯器。單擊+号就可以添加信号和槽的連接配接。最後設定完成後,如圖:

qt4的安裝-應用程式設計及在arm闆上的移植

到此為止,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,彈出如下視窗。

qt4的安裝-應用程式設計及在arm闆上的移植
qt4的安裝-應用程式設計及在arm闆上的移植

到此,在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所産生的!

希望看到本文的朋友,給出一些其他的解決辦法,而不是像我這樣的麻煩移植!

繼續閱讀