微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Qt图形编程基础之:Qt/Embedded开发入门

Qt图形编程基础之:Qt/Embedded开发入门

时间:09-13 来源:互联网 点击:

可用于创建用户界面的可视元素。按钮、菜单、滚动条、消息框和应用程序窗口都是窗口部件的实例。因为所有的窗口部件既是控件又是容器,因此Qt的窗口部件不能任意地分为控件和容器。通过子类化已存在的Qt部件或少数时候必要的全新创建,自定义的窗口部件能很容易地创建出来。

窗口部件是QWidget或其子类的实例,用户自定义的窗口通过子类化得到,如图12.3所示。

图12.3源自QWidget的类层次结构

一个窗口部件可包含任意数量的子部件。子部件在父部件的区域内显示。没有父部件的部件是顶级部件(比如一个窗口),通常在桌面的任务栏上有它们的入口。Qt不在窗口部件上施加任何限制。任何部件都可以是顶级部件,任何部件都可以是其他部件的子部件。通过自动或手动(如果你喜欢)使用布局管理器可以设定子部件在父部件区域中的位置。如果父部件被停用、隐藏或删除,则同样的动作会应用于它的所有子部件。

1.Hello窗口实例

下面是一个显示“HelloQt/Embedded!”的程序的完整代码:

#includeqapplication.h>

#includeqlabel.h>

intmain(intargc,char**argv)

{

QApplicationapp(argc,argv);

QLabel*hello=newQLabel

(FONTcolor=blue>Helloi>QtEmbedded!/i>/FONT>,0);

app.setMainWidget(hello);

hello->show();

returnapp.exec();

}

2.常见通用窗口组合

Qt中还有一些常见的通用窗口,它们使用了Windows风格显示,图12.5、12.6、12.7、12.8分别描述了常见的一些通用窗口的组合使用。图12.4是该Hello窗口的运行效果图:

图12.4 Hello窗口运行效果图     图12.5 使用QHBox排列一个标签和一个按钮

        

图12.6 使用了QButtonGroup的两个单选框和两个复选框 图12.7 QGroupBox组合图示

图12.8使用了QGroupBox进行排列的日期类QDateTimeEdit、一个行编辑框类QLine-
Edit、一个文本编辑类QTextEdit和一个组合框类QComboBox。

图12.9是以QGrid排列的一个QDial、一个QProgressBar、一个QSpinBox、一个QScrollBar、一个QLCDNumber和一个QSlider。

图12.10是以QGrid排列的一个QIconView、一个QListView、一个QListBox和一个QTable。

     

图12.8 QGrid组合图示1    图12.9 QGrid组合图示2 图12.10钟表部件图示

3.自定义窗口

开发者可以通过子类化QWidget或它的一个子类创建他们自己的部件或对话框。为了举例说明子类化,下面提供了数字钟部件的完整代码。

钟表部件是一个能显示当前时间并自动更新的LCD。一个冒号分隔符随秒数的流逝而闪烁,如图12.10所示。

Clock从QLCDNumber部件继承了LCD功能。它有一个典型部件类所拥有的典型构造函数,带有可选的parent和name参数(如果设置了name参数,测试和调试会更容易)。系统有规律地调用从QObject继承的timerEvent()函数。

它在clock.h中定义如下所示:

#includeqlcdnumber.h>

classClock:publicQLCDNumber

{

public:

Clock(QWidget*parent=0,constchar*name=0);

protected:

voidtimerEvent(QTimerEvent*event);

private:

voidshowTime();

boolshowingColon;

};

构造函数showTime()是用当前时间初始化钟表,并且告诉系统每1000ms调用一次timerEvent()来刷新LCD的显示。在showTime()中,通过调用QLCDNumber::display()来显示当前时间。每次调用showTime()来让冒号闪烁时,冒号就被空白代替。

clock.cpp的源码如下所示:

#includeqdatetime.h>

#includeclock.h

Clock::Clock(QWidget*parent,constchar*name)

:QLCDNumber(parent,name),showingColon(true)

{

showTime();

startTimer(1000);

}

voidClock::timerEvent(QTimerEvent*)

{

showTime();

}

voidClock::showTime()

{

QStringtimer=QTime::currentTime().toString().left(5);

if(!showingColon)

{

time[2]='';

}

display(time);

showingColon=!showingColon;

}

文件clock.h和clock.cpp完整地声明并实现了Clock部件。

#includeqapplication.h>

#includeclock.h

intmain(intargc,char**argv)

{

QApplicationapp(argc,argv);

Clock*clock=newClock;

app.setMainWidget(clock);

clock->show();

returnapp.exec();

}

12.2.5Qt/Embedded图形界面编程

Qt提供了所有可能的类和函数来创建GUI程序。Qt既可用来创建“主窗口”式的程序,即一个有菜单栏,工具栏和状态栏作为环绕的中心区域;也可以用来创建“对话框”式的程序,使用按钮和必要的选项卡来呈现选项与信息。Qt支持SDI(单文档界面)和MDI(多文档界面)。Qt还支持拖动、放下和剪贴板。工具栏可以在工具栏区域内移动,拖拽到其他区域或者作为工具托盘浮动起来。这个

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top