1、程式的速度. 利用 QT Designer 可以用一种所见既所得的方式,来产生 QT 程式的 GUI 介面的程式码. 通过增加一些功能,就可以完成一个程式了.利用 QT Designer 可以非常快速的学会 QT, 而我们这里说利用 QT Designer 来学习 QT 而不是利用 QT Designer 来写 QT, 这里的区别就在於, QT Designer 所产生的程式码有些繁琐. 跑起来也比较的慢些.我们这里只是利用 QT Designer 来帮助我们学习.而不是直接 去跑 QT Designer 生成的程式码. 3. 基本要求 因为这篇文章主要是告诉大家如何利用 QT Design
2、来达到快速学习 QT 的. 所以您最也要做到 您需要有一台可以跑 Linux 的电脑或者 Microsoft Windows 的电脑 足够的 RAM 和 HardDisk 用以安装、 编译 QT 您的 Linux 中需要安装有 KDE、QT、QT Designer、g+ 等等程式. 您如果适用 Microsoft Windows, 则您需要 VC+ 和 QT For Windows Linux 的使用者最好还能安装一个 Kdevelop(一个非常好的用来开发 QT 的 Develop Enverment) 4. QT Designer 简单的介绍-从 PushButton 开始 假设您一切都安
3、装好了.现在我们打开 QT Designer 吧. 打开後,选择 New - Dialog 这时侯,您的 QT Designer 中就会出现一个 From1 来. 现在我们 click 一下上面的 tools 中 的那个 pushbutton, (标有 OK 的图标)并且用 mouse 选择到一定的大小. 在这个 pushbutton 上面用您的 mouse double click 一下. 我们就可以改变 pushbutton 的 label 了. 这里我们把 pushbutton1 这几个字,换成 Exit, 然後直接按 Enter 或者用 mouse 选择 OK 也可以. 现在我们 看到
4、, 那个 button 中的标签已将变成 Exit 了. 我们这时侯还需要给这个 Exit Button 一个 signal(信号), 这样当您在 Exit 这个 Button 上 click 的时侯. QT 才知道如何去处理这个信 号. 我们按一下 F3(connect singnal slot)然後在那个 Exit Button 上面 Click 一下. 这时 侯我们就看到了 Edit Connection 的 Dialog 了. 在 Signal 中选择 clicked, 在 slot 中,先选 择 setFocus() 就好了. 这时侯选择 OK. 我们就算是完成了. 如果想看看这个小
5、程式长什麽样子. 可以用 CTRL+T来看 PreView. (see figure 1) figure 1 首先在您的 $HOME 中建立一个 qt_program 的 Directory 出来. 这个 Directory 将会 作为我们存放文件的地方. 现在我们用 File - Save 把这个文件存为 form1.ui 放在 $HOME/qt_program 的目录下.现在如果大家打开 form1.ui 来看一看. 会发现那是一堆有很多 的东西.所以我们需要用一个叫做 uic 的程式来把 .ui 文件转换成 QT 可以使用的 .cpp 和 .h 文件. 用下面的指令就可以生成我们需要的
6、.h 文件了 uic -o form1.h form1.ui 而生成 .cpp 文件则需要用以下的指令 uic -i form1.h -o form1.cpp form1.ui 这时侯,form1.h中就会看到一个标准的 QT 需要的 .h 文件 1. #ifndef FORM1_H 2. #define FORM1_H 3. #include 4. #include 5. class QVBoxLayout;6. class QHBoxLayout;7. class QGridLayout;8. class QPushButton;9. class Form1 : public QDialo
7、g 10. 11. Q_OBJECT 12. public:13. Form1( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );14. Form1();15. QPushButton* PushButton1;16. ;17. #endif / FORM1_H 1-2: 定义 FORM1.H 这个文件 3-4: 这里是我们需要用到的两个 .h 文件 5-7: 我们根本用不到, qt designer 自己产生的 8: QPushButton 需要用到这个 class 9-11: 我们
8、的 form1 是 based 在 QDialog 上面的 12: 公开的 (可以在以後的程式中使用.用过 C+ 的人一定明白) 13: Form1的架构 14: 清除 Form1 15: 产生一个pushbutton (就是那个标有 exit 的 按钮 17: 结束对 FORM1.H 的定义 而 form1.cpp 文件如下:1. #include form1.h2. #include 5. #include 6. #include 7. /* 8. * Constructs a Form1 which is a child of parent, with the 9. * name nam
9、e and widget flags set to f10. * 11. * The dialog will by default be modeless, unless you set modal to 12. * TRUE to construct a modal dialog. 13. */ 14. Form1:Form1( QWidget* parent, const char* name, bool modal, WFlags fl ) 15. : QDialog( parent, name, modal, fl ) 16. 17. if ( !name ) 18. setName(
10、 Form1 );19. resize( 596, 480 );20. setCaption( tr( ) );21. PushButton1 = new QPushButton( this, PushButton122. PushButton1-setGeometry( QRect( 130, 160, 161, 71 ) );23. PushButton1-setText( tr( Exit24. / signals and slots connections 25. connect( PushButton1, SIGNAL( clicked() ), PushButton1, SLOT(
11、 setFocus() ) );26. 27. /* 28. * Destroys the object and frees any allocated resources 29. */ 30. Form1:Form1() 31. 32. / no need to delete child widgets, Qt does it all for us 33. 1: 我们上面的定义文件 2: pushbutton所需要的 .h 文件 3-6:7-13: QT Designer 产生的注解 14-15: Form1 的结构 17-18: 如果Form1:Form1中没有 pass 一个名子过来.那
12、麽就命名为 Form1 19: resize 20: 把显示出来的那个 Dialog 的名子定为 Form1, 也就是 window 中左上角的字 21: 做出一个新的button,名子为 PushButton1 22: 这里设定了 pushbutton 在这个 dialog 中的位置. Qrect(130, 160, 161, 71) 这里是说在一 个Dialog中,以左边最上面来算,位置是(0,0), 所以说,这里的130(横向)和 160 (纵向)就是说我 们从 (0,0)开始,往左边跑130,往下跑 160.这样我们就算出了pushbutton这个按钮画在那里了.後面的161, 71则
13、是定义这个pushbutton到底要画多大,设定了长和高 23: 通过呼叫setText指令,我们可以在这个 button上面给入我们需要的文字.这里是 Exit 24:25: 上面就是处理当接收到 clicked 的信号(singal)以後,我们所作的事情(setFocus on PushButton1) connect 这里是告诉程式连接一个信号,PushButton1, SIGNAL(clicked(),是说信号是由 PushButton1 发出, 发出的信号为 mouse clicked,PushButton1, SLOT(setFocus()表示信号发出以後,目标(Object)为
14、PushButton, event 是 setFocus() 动作 26: 主程式结束 27-29: QT Designer 的注解 30-33:由於我们要常常用到 QT Designer, 也就是说,需要常常用到 uic 这苹程式. 为了省去每次都要 打一堆东西的麻烦.我们来写一各小 script 来处理 .ui 档案. 不难看出, uic 在处理/生成 .h .cpp 档案的时侯,用到了两个指令 所以我们的 script 就写成 # #!/bin/sh # # myuic program convert .ui to .cpp .h by calling uic # # INPUT_UI=
15、$ # #这里读取外面传回来的文件名 # if ! -f $INPUT_UI # then # echo UIC File $INPUT_UI Not Found # echo # Userage myuic input_file.uiexit 1 # fi # #上面的语句检查我们所输入的.ui文件是否存在 # #如果找不到指定的.ui文件,则显示一个简短的 # #使用说明 # INPUT_H=echo $ | cut -d . -f1.h # #这里我们利用 cut 来处理输入的 .ui 文件. # #得到一个 .h 的文件名 # INPUT_CPP=echo $ | cut -d -f1
16、.cpp # #同样的道理,利用 cut 产生一个 .cpp 的文件名 # uic -o $INPUT_H $INPUT_UI # #这里就是利用 .ui 产生 .h 的文件 # uic -i $INPUT_H -o $INPUT_CPP $INPUT_UI # #利用 .h 和 .ui 产生 .cpp 文件. # 我门把这个文件存为 myuic. 并切 chmod +x 变成可执行档案. 然後 cp 到 /usr/bin 上面. 如果您在电脑中没有 root 的权限. 可以在自己的 $HOME 目录中做一个 bin 的 Directory 出来. 然後去编辑您的 .bash_profile
17、(这里假设您用的是 bash) 如果您的 .bash_profile 中本身已经有了 PATH 这段文字,那麽 您只要在原本的 PATH 後面加上 :$HOME/bin就可以了.如果没有 那麽就在您的 .bash_profile 中写入 PATH=$PATH:$HOME/bin export PATH 这样您以後就可以直接执行 myuic 这个文件了.现在试试看用 myuic 来处理 刚刚的那个 form1.ui 这个文件吧. 先把旧的 .h .cpp 都删除掉 rm -f *.cpp *.h 然後用 myuic 来生成新的 .cpp .h 文件 myuic form1.ui 这时候用 ls
18、就会看到 form1.cpp form1.h form1.ui 这三个文件了 这时侯我们只需要写一个小的main.cpp就可以编译form1.cpp了. main.cpp非常的简单 #include #include int main(int argc, char *argv) KApplication app(argc, argv, ); /KDE 是建立在QT的基础上得所以KApplication /所以kapp.h实际上包含了qapplication.h Form1 *form1=new Form1();form1-show();app.setMainWidget(form1);retu
19、rn(app.exec(); 基本上来说,很简单.然後当然就是编译啦.我建议写出来的东西都用 Kdevelop 来解决.首先 Kdevelop 介面非常的友善.又能省下写 Makefile 的麻烦.打开 Kdevelop 以後,选择 项目-新建, KDE2-Normal, 然後 选择 Next,在这一页中.注意不要在任何选项中打x,因为我们用不到.反而会增加麻烦.最後 一直 next,然後 create , exit. 这时侯我们就已经有一个新的项目可以用了.在 menu 中选择:项目-添加现存文件.然後把 qt_program 中的 form1.cpp form1.h 和 main.cpp
20、加入. 这时候只要按 一下 F9 , Kdevelop 就会自动帮您把程式 compile 出来.并且执行. 程式执行後,我们不能用 click 那个 Exit Button 退出程式.因为我们并没有给他退出的信号.现在让我们来把程式码作些改动 # #form1.h #ifndef FORM1_H #define FORM1_H class QPushButton;class Form1 :Q_OBJECT public:Form1(QWidget *parent=0, const char *name=0);QPushButton* PushButton1;#endif / FORM1_H
21、# #form1.cpp Form1:Form1(QWidget* parent, const char* name): QDialog(parent, name) setCaption(tr(Form21);PushButton1=new QPushButton(this,PushButton1-setGeometry(QRect(130,160,161,71);PushButton1-vsetText(tr(connect(PushButton1, SIGNAL(clicked(), kapp, SLOT(quit();Form1() # main.cpp 保持不变.经过一番简化.程式码马
22、上简单很多了. 这里我们除了把一些由 QT Design 做出的不必要的 code 挑除以外.对 form1.cpp 做了两个小改动. 1.增加了 #include 这个 head file. 2.我们把 connect(PushButton1, SIGNAL(clicked(), PushButton1, SLOT(setFocus();改变为 同样的信号传送,但是目标对象有所改变.现在目标将作用在 kapp 上面也就是我们 的主程式(main application),而 SLOT 则是呼叫 quit(),现在 Kdevelop 中更改 程式码.然後按下 F9 .等待程式运行.这时侯我们的
23、程式,只要在那个 Exit 的 Button 上面用 mouse click 一下. 这个程式就完全关闭了. 现在我们在这个 PushButton 中再增加一些功能.我们来看看 QT Designer 中的 ToolTip 功能. 如果您的 QT Designer 中 Property Edit 并没有自动出现.那麽请在 QT Designer 中选择 Menu 中的 Windows 然後选择 Property Edit. 只要在 PushButton1 那个 Button 上面用 mouse click 一下. 就可以对 Pushbutton1 的 Property 进行编辑. 在 Prop
24、erty Edit 中的 ToolTip 後面可以进行文字输入的地方,打入下面的文字 Click On this Button Will Exit Main Window. 然後 sava 文件. (Form1.ui)在用我们的小 script 呼叫 uic 程式把, Form1.ui 转成 Form1.h 和 Form1.cpp 这时侯我们来观察生成的 form1.cpp 文件,我们会发现现在这里面比一前多了些东西. 现在这里多了一行:QToolTip:add( PushButton1, tr( Clicke On this Button Will Exit Main Window.这里,我们用QToolTip中的add,在 Object (PushButton1) 上面加入Clicke On this Button Will Exit Main window.这个字幕.现在我们在前面那个被我们简化的 form1.cpp 中,加入上面那 行程式码,因为我们需要调用到 QToolTip 所以我们也要把 qtooltip.h 给 include 进去. #form1.cpp
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1