天天看点

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所产生的!

希望看到本文的朋友,给出一些其他的解决办法,而不是像我这样的麻烦移植!

继续阅读