红联Linux门户
Linux帮助

嵌入式Linux用Qt Designer快速开发

发布时间:2006-04-07 00:50:18来源:红联作者:reing
RAD(快速应用程序开发)是一种高效的软件开发形式,可以让用户在极短的时间里创建一个图形化的用户界面。通常情况下,在一张空白的表单上,开发人员可以通过拖拉或点击的方式,在窗口的适当位置上添加一些输入框和按钮等窗口组件。这时,RAD工具会自动编写和维护代码。而用户所要做的只是确定当点击按钮或选择选单选项时将要发生什么事件。

在Linux下,一个非常流行的RAD工具就是Qt Designer。它是嵌入式公司Trolltech的Qt软件包的一个组成部分。如果用户使用的是KDE桌面,那么Qt已经自动安装上了,Qt Designer也很有可能已经被安装好。如果用户的系统没有安装,那么针对不同的版本,可以很方便地找到KDE Development Tools,并安装之。以Red Hat 9.0为例,用户可以从主选单→系统设置→添加/删除应用程序中选择KDE软件开发,即可完成Qt Designer的安装(如图1所示)。




图1 安装Qt Designer


创建

为了快速地向大家展示一下Qt Designer功能,先创建一个简单的摄氏温度和华氏温度的转换程序。本文里将设计一个简单的GUI,并且添加一些简单的代码来实现温度的转换。因为是为了展示一下快速的开发过程,而不是一个严谨的软件项目的开发,所以这里不会进行任何的错误检查,也不进行输入检验(也就是检查用户的输入是否为合法的温度形式)、缓冲溢出检查等在日常软件开发中一定要做的步骤。

如果用户使用的是KDE,那么选单上应该已经有Qt Designer的图标。不同的发行版,图标的位置会有所不同。如果用户的发行版没有Qt Designer图标,那么可以在命令行模式下输入“designer”命令来启动该开发工具。在Red Hat 9.0中,可以通过点击主选单→编程→更多编程工具→Qt Designer来启动(如图2)。




图2 启动Qt Designer


Qt Designer首先呈现给用户的是一个New/Open对话框(如图3所示)。因为这里要创建一个C++程序,所以在此选择C++ Project,点击“OK”继续。




图3 New/Open对话框


选择一个想要保存文件的位置,并且给出一个文件名,在此使用的文件名是cfconv。注意这里文件名的扩展名一定要是.pro。点击“Save”后,返回到了Project Settings对话框(见图4)。




图4 保存文件




图5 Qt Designer主窗口


现在就已经在Qt Designer主窗口上了(见图5),确保Property Editor可见。如果它是不可见的,用户可以通过Windows→Views→Property Editor/Signal Handlers选单选项来使其可见(缺省情况下是可见的)。




图6 创建一个新的表单




图7 更改表单的属性


通过选择File→New选单,然后选择Dialog来创建一个新的对话框。这时Qt Designer会创建一个新的空白表单(见图6),用户可以在其上放置输入框和按钮。

打开Property Editor(见图7),把name的值改为“cfconvMainForm”,把caption的值改为“Celsius to Fahrenheit Converter”。

这里表单的name是被应用程序使用的内部名字,在用户编写代码时,有时需要使用的就是这个名字。Caption指的是要在标题栏上显示的名字。

从左边的工具箱中选择Common Widgets,并且双击“TextLabel”。在表单的左上角放置一个标签,在这个标签位置下方再放置一个同样的标签。选中上面的标签,并且将其text值改为“Celsius”,相应地把第二个标签的text值也改为“Fahrenheit”。在这两个标签的后面加上两个对应的输入框,用于输入需要转换的温度和输出转换后的温度。从Common Widgets中双击选择LineEdit,然后在两个标签后创建两个LineEdit。

把两个LineEdit框的name值分别改为“celsiusLineEdit”和“fahrenheitLineEdit”,再把fahrenheitLineEdit文本框的readOnly属性改为True。

从Common Widgets上选择PushButton,并且创建两个按钮,分别将其name和text属性改为quitPushButton和Quit、convertPushButton和Convert。这时表单看起来就如图8所示。




图8 基本完成的GUI


现在按“Ctrl+S”或从选单中选择File→Save,接下来要求输入文件名。缺省情况下,使用的是表单的name值,扩展名使用的是.ui。用户可以接受这个名字,然后点击“Save”。

如果想看一看效果,用户可以按“Ctrl+T”或从选单中选择Preview→Preview Form来预览应用程序。但是现在按钮还不能做任何事情,所以下一步要做的事情就是让按钮和某一特定的动作相关联。当点击“Quit”按钮时,要求应用程序会被关闭;而当点击“Convert”按钮时,要求输入的温度由摄氏温度转换为华氏温度。

在“Quit”按钮上点击右键,选择Connections,然后点击“New”。从Sender列表中选择quitPushButton,从Signal列表中选择clicked(),从Receiver列表中选择cfconvMainFrom,从Slot列表中选择close()。用户可以参见图9所示。




图9 为Quit按钮创建关联


现在,当用户点击“Quit”按钮时,会向表单发送一个鼠标点击的信号,这将使这个表单关闭(因为这个表单是主表单,所以它关闭时应用程序也就同时关闭了)。要进行测试,可以选择Preview→Preview Form。这时点击“Quit”按钮,预览窗口就会被关闭。

下面为“Convert”按钮创建连接。在“Convert”按钮上点击右键,然后选择Connections。这时用户会发现这是一个全局连接窗口,而不是某一窗口部件的连接。点击“New”来创建一个新的连接。从Sender列表中选择convertPushbButton,从Signal列表中选择clicked(),从Receiver列表中选择cfconvMainFrom。本想将该按钮与fahrenheitLineEdit窗口部件相关联,但列表中却没有一个可以满足这项要求的栏目。因此需要创建一个新的栏目来完成这个连接。




图10 创建新的栏




图11 完成连接创建


点击“Edit Slots”和“New Function”(见图10),把函数名改为convert(),其它的值可以保持不变,点击“OK”来关闭窗口。

要完成这个连接,从Slot列表中选择convert()(见图11)。

现在来完成应用程序的代码部分:创建convert()函数。在Project Overview窗口点击“cfconvmainform.ui.h”来启动Code Editor。此时convert()函数实际上已经存在了,只不过是空的罢了。输入下面的C++代码来完成函数:

引用:
void cfconvMainForm::convert() {
/* Declare some variables */
double celsius_input, result = 0;

/* Retrieve Celsius input */
celsius_input = celsiusLineEdit->text().toDouble();

/* Convert to Fahrenheit */
result = (celsius_input * (9.0/5.0)) + 32.0;

/* Enter result and clear Celsius input box */
fahrenheitLineEdit->setText(QString::number(result, 'f', 1));
celsiusLineEdit->clear();
}




现在就已经基本完成这个应用程序了。不过在编译和运行此应用程序之前,还要创建一个main.cpp文件。方法是选择File→New→C++Main-File(main.cpp),只需接受缺省的配置即可。main.cpp会自动在Code Editor中打开。因为这里无需改变main.cpp中的任何东西,所以直接将Code Editor窗口关闭,并且保存main.cpp。这时也同时关闭cfconfMainForm.ui.h Code Editor窗口。

编译

到此为止,在Qt Designer中的工作已经完成了。保存整个项目,下面来编译和运行这个程序。在编译程序之前,要首先生成它的Makefile文件。打开一个终端,然后切换至保存有项目的位置,使用以下命令来生成Makefile文件:
#qmake -o Makefile cfconv.pro

现在,就可以运行make来编译程序了,根据系统的性能,这个步骤需要花费一点时间。当编译工作完成后,输入./cfconv来运行程序。如果一切正常,用户应该已经看到程序了。
文章评论

共有 13 条评论

  1. cargo 于 2013-04-12 12:08:58发表:

    iwant

  2. 297336069 于 2013-04-05 10:38:11发表:

    挺清楚的~~

  3. csli4611 于 2012-03-01 20:44:46发表:

    学习下

  4. hailiang0208 于 2011-11-22 14:27:14发表:

    {:3_107:}

  5. hailiang0208 于 2011-11-22 14:01:06发表:

    不是太好!

  6. westcb 于 2010-06-12 10:48:23发表:

    不太喜欢这样的方式

  7. westcb 于 2010-06-12 10:48:19发表:

    不太喜欢这样的方式

  8. RestarLinux 于 2010-05-16 16:50:31发表:

    ..............

  9. RestarLinux 于 2010-05-16 16:50:25发表:

    ..............

  10. glxin1982 于 2010-05-16 16:17:12发表:

    :0wpoi2

  11. haofree 于 2010-05-16 14:07:05发表:

    不错

  12. linshao.Solin 于 2009-12-17 16:42:29发表:

    Qt3版本的很多功能编译不了啊

  13. luffy1981 于 2006-08-02 12:59:48发表:

    good