Qt图形编程基础之:实验内容——使用Qt编写“Hello,World”程序
12.3 实验内容--使用Qt编写"Hello,World"程序
1.实验目的
通过编写一个跳动的"Hello,World"字符串,进一步熟悉嵌入式Qt的开发过程。
2.实验步骤
(1)生成一个工程文件(.pro文件)。
使用命令progen产生一个工程文件(progen程序可在tmake的安装路径下找到)。
如下所示:
progen –t app.t –o hello.pro
那样产生的hello.pro工程文件并不完整,开发者还需添加工程所包含的头文件,源文件等信息。
(2)新建一个窗体。
启动Qt图形编辑器,使用如下命令:
./designer(该程序在qt-2.3.x for x11的安装路径的bin目录下)
接着单击编辑器的"new"菜单,弹出了一个"new Form"对话框,在这个对话框里选择"Widget",然后单击"OK"按钮,这样就新建了一个窗体。
接下来再对这个窗体的属性进行设置,注意把窗体的"name"属性设为"Hello";窗体的各种尺寸设为宽"240"、高"320",目的是使窗体大小和FS2410带的显示屏的大小一致;窗体背景颜色设置为白色。具体设置如图12.18所示。
图12.18 Hello窗体的属性设置
设置完成后,将其保存为hello.ui文件,这个文件就是Hello窗体的界面存储文件。
(3)生成Hello窗体类的头文件和实现文件。
下面根据上述的界面文件hello.ui使用uic工具产生Hello窗体类的头文件和实现文件,具体方法是:
$ cd qt-2.3.7/bin
$ uic –o hello.h hello.ui
$ uic –o hello.cpp –impl hello.h hello.ui
这样就得到了Hello窗体类的头文件hello.h和实现文件hello.cpp。下面就可以根据需要实现的具体功能,在hello.cpp文件里添加相应的代码。
比如要在Hello的窗体上显示一个动态的字符串"Hello,World",那么需要重新实现paintEvent(QPaintEvent *)方法,同时还需要添加一个定时器QTimer实例,以周期性刷新屏幕,从而得到动画的效果。下面是修改后的hello.h和hello.cpp文件。
/****************************************************************************
** 以下是 hello.h 的代码
****************************************************************************/
#ifndef HELLO_H
#define HELLO_H
#include <qvariant.h>
#include <qwidget.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class Hello : public QWidget
{
Q_OBJECT
public:
Hello(QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
~Hello();
/* 以下是手动添加的代码 */
signals:
void clicked();
protected:
void mouseReleaseEvent(QMouseEvent *);
void paintEvent(QPaintEvent *);
private slots:
void animate();
private:
QString t;
int b;
};
#endif // HELLO_H
/****************************************************************************
** 以下是 hello.cpp 源代码
****************************************************************************/
#include "hello.h"
#include <qlayout.h>
#include <qvariant.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qpushbutton.h>
#include <qtimer.h>
#include <qpainter.h>
#include <qpixmap.h>
/*
* Constructs a Hello which is a child of 'parent', with the
* name 'name' and widget flags set to 'f'
*/
Hello::Hello(QWidget* parent, const char* name, WFlags fl)
: QWidget(parent, name, fl)
{
if (!name)
setName("Hello");
resize(240, 320);
setMinimumSize(QSize(240, 320));
setMaximumSize(QSize(240, 320));
setSizeIncrement(QSize(240, 320));
setBaseSize(QSize(240, 320));
QPalette pal;
QColorGroup cg;
cg.setColor(QColorGroup::Foreground, black);
cg.setColor(QColorGroup::Button, QColor(192, 192, 192));
cg.setColor(QColorGroup::Light, white);
cg.setColor(QColorGroup::Midlight, QColor(223, 223, 223));
cg.setColor(QColorGroup::Dark, QColor(96, 96, 96));
cg.setColor(QColorGroup::Mid, QColor(128, 128, 128));
cg.setColor(QColorGroup::Text, black);
cg.setColor(QColorGroup::BrightText, white);
cg.setColor(QColorGroup::ButtonText, black);
cg.setColor(QColorGroup::Base
- Qt图形编程基础之:嵌入式GUI简介(08-13)
- 《嵌入式Linux应用程序开发标准教程》(第2版)(09-30)
- Qt图形编程基础之:Qt/Embedded开发入门(09-13)
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)
- Linux标准趋向统一(11-12)