第5讲Qt窗口部件教资特选

上传人:公**** 文档编号:567313703 上传时间:2024-07-19 格式:PPT 页数:51 大小:1.97MB
返回 下载 相关 举报
第5讲Qt窗口部件教资特选_第1页
第1页 / 共51页
第5讲Qt窗口部件教资特选_第2页
第2页 / 共51页
第5讲Qt窗口部件教资特选_第3页
第3页 / 共51页
第5讲Qt窗口部件教资特选_第4页
第4页 / 共51页
第5讲Qt窗口部件教资特选_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《第5讲Qt窗口部件教资特选》由会员分享,可在线阅读,更多相关《第5讲Qt窗口部件教资特选(51页珍藏版)》请在金锄头文库上搜索。

1、第第3 3章章 窗口部件窗口部件n3.1 基础窗口部件基础窗口部件QWidgetn3.2 对话框对话框QDialogn3.3 其他窗口部件其他窗口部件n3.4 小结小结1教学教资 前一章中第一次建立前一章中第一次建立helloworldhelloworld程序时,曾看到程序时,曾看到Qt CreatorQt Creator提供的默认基类提供的默认基类只有只有QMainWindowQMainWindow、QWidgetQWidget和和QDialogQDialog三种。三种。1 1)QMainWindowQMainWindow是带有菜单栏和工具栏的主窗口类,是带有菜单栏和工具栏的主窗口类,2)

2、QDialog2) QDialog是各种对话框的基类,而它们二者全部继承自是各种对话框的基类,而它们二者全部继承自QWidgetQWidget。不仅如此,。不仅如此,其实所有的窗口部件都继承自其实所有的窗口部件都继承自QWidgetQWidget。2教学教资3.1 基础窗口部件基础窗口部件QWidgetnQWidgetQWidget类是所有用户界面对象的基类,被称为基础窗口类是所有用户界面对象的基类,被称为基础窗口部件。部件。QWidgetQWidget继承自继承自QObjectQObject类和类和QPaintDeviceQPaintDevice类。类。QObjectQObject是所有支持

3、是所有支持QtQt对象模型(对象模型(Qt Object ModelQt Object Model)的)的QtQt对象的基类对象的基类QPaintDeviceQPaintDevice是所有可以绘制的对象的基类。是所有可以绘制的对象的基类。本节内容:本节内容:n窗口、子部件以及窗口类型窗口、子部件以及窗口类型n窗口几何布局窗口几何布局 n程序调试程序调试 3教学教资窗口、子部件以及窗口类型窗口、子部件以及窗口类型 / 新建新建QWidget类对象,默认类对象,默认parent参数是参数是0,所以它是个窗口,所以它是个窗口 QWidget *widget = new QWidget(); / 设置

4、窗口标题设置窗口标题 widget-setWindowTitle(QObject:tr(我是我是widget); / 新建新建QLabel对象,默认对象,默认parent参数是参数是0,所以它是个窗口,所以它是个窗口 QLabel *label = new QLabel(); label-setWindowTitle(QObject:tr(我是我是label); / 设置要显示的信息设置要显示的信息 label-setText(QObject:tr(label:我是个窗口我是个窗口); / 改变部件大小,以便能显示出完整的内容改变部件大小,以便能显示出完整的内容 label-resize(18

5、0, 20); / label2指定了父窗口为指定了父窗口为widget,所以不是窗口,所以不是窗口 QLabel *label2 = new QLabel(widget); label2-setText(QObject:tr(label2:我不是独立窗口,只是我不是独立窗口,只是widget的子部件的子部件); label2-resize(250, 20); / 在屏幕上显示出来在屏幕上显示出来 label-show(); widget-show();4教学教资n在程序中定义了一个在程序中定义了一个QWidget类对象的指针类对象的指针widget和两个和两个QLabel对象指针对象指针la

6、bel与与label2,其中,其中label没有父窗口,而没有父窗口,而label2在在widget中,中,widget是其父是其父窗口。窗口。 n窗口部件窗口部件(Widget)这里简称部件,是)这里简称部件,是Qt中建立用户界面的主要元中建立用户界面的主要元素。像主窗口、对话框、标签、还有以后要介绍到的按钮、文本输入素。像主窗口、对话框、标签、还有以后要介绍到的按钮、文本输入框等都是窗口部件。框等都是窗口部件。n在在Qt中,把没有嵌入到其他部件中的部件称为中,把没有嵌入到其他部件中的部件称为窗口窗口,一般的,窗口都,一般的,窗口都有边框和标题栏,就像程序中的有边框和标题栏,就像程序中的wi

7、dget和和label一样。一样。nQMainWindow和大量的和大量的QDialog子类是最一般的窗口类型。窗口就子类是最一般的窗口类型。窗口就是没有父部件的部件,所以又称为是没有父部件的部件,所以又称为顶级部件顶级部件(top-level widget)。)。与其相对的是非窗口部件,又称为与其相对的是非窗口部件,又称为子部件子部件(child widget)。在)。在Qt中中大部分部件被用作子部件,它们嵌入在别的窗口中,例如程序中的大部分部件被用作子部件,它们嵌入在别的窗口中,例如程序中的label2。 5教学教资窗口类型窗口类型 前面讲到窗口一般都有边框和标题栏,但不是必需的:前面讲到

8、窗口一般都有边框和标题栏,但不是必需的:nQWidgetQWidget的构造函数有两个参数:的构造函数有两个参数:QWidget * parent = 0QWidget * parent = 0和和Qt:WindowFlags f = 0Qt:WindowFlags f = 0;前面的前面的parentparent就是指父窗口部件,默认值为就是指父窗口部件,默认值为0 0,表明没有父窗口;,表明没有父窗口;而后面的而后面的f f参数是参数是Qt:WindowFlagsQt:WindowFlags类型的,它是一个枚举类型,分为类型的,它是一个枚举类型,分为窗口类型(窗口类型(WindowType

9、WindowType)和窗口标志()和窗口标志(WindowFlagsWindowFlags。前者可以定义。前者可以定义窗口的类型,比如我们这里窗口的类型,比如我们这里f=0f=0,表明使用了,表明使用了Qt:WidgetQt:Widget一项,这是一项,这是QWidgetQWidget的默认类型,这种类型的部件如果有父窗口,那么它就是子的默认类型,这种类型的部件如果有父窗口,那么它就是子部件,否则就是独立的窗口。部件,否则就是独立的窗口。6教学教资 例如:使用其中的例如:使用其中的Qt:Dialog和和Qt:SplashScreen,更改程序中的新建对象,更改程序中的新建对象的那两行代码:的

10、那两行代码:QWidget *widget = new QWidget(0, Qt:Dialog);QLabel *label = new QLabel(0, Qt:SplashScreen); 更改后,窗口的样式发生了改变,一个是对话框类型,一个是欢迎窗口类型。更改后,窗口的样式发生了改变,一个是对话框类型,一个是欢迎窗口类型。 再次更改那两行代码:再次更改那两行代码:QWidget *widget = new QWidget(0, Qt:Dialog | Qt:FramelessWindowHint);QLabel *label = new QLabel(0, Qt:SplashScree

11、n | Qt:WindowStaysOnTopHint);Qt:FramelessWindowHint用来产生一个没有边框的窗口用来产生一个没有边框的窗口Qt:WindowStaysOnTopHint用来使该窗口停留在所有其它窗口上面。用来使该窗口停留在所有其它窗口上面。7教学教资窗口几何布局 对于窗口的大小和位置,根据是否包含边框和标题栏两种情况,要用不同的函数来获取对于窗口的大小和位置,根据是否包含边框和标题栏两种情况,要用不同的函数来获取它们的数值。它们的数值。 这里的函数分为两类,一类是包含框架的,一类是不包含框架的:这里的函数分为两类,一类是包含框架的,一类是不包含框架的:n包含框架

12、:包含框架:x()、y()、frameGeometry()、pos()和和move()等函数;等函数;n不包含框架:不包含框架:geometry()、width()、height()、rect()和和size()等函数。等函数。8教学教资程序调试程序调试下面在讲解窗口几何布局的几个函数的同时,讲解一下程序调试方面的内容。 将主函数内容更改如下:将主函数内容更改如下:#include #include #include #include int main(int argc, char *argv)int main(int argc, char *argv) QApplication a(argc

13、, argv); QApplication a(argc, argv); QWidget widget; QWidget widget; int x = widget.x(); int x = widget.x(); int y = widget.y(); int y = widget.y(); QRect geometry = widget.geometry(); QRect geometry = widget.geometry(); QRect frame = widget.frameGeometry(); QRect frame = widget.frameGeometry(); ret

14、urn a.exec(); return a.exec(); x()x()、y()y()分别返回部件的位置坐标的分别返回部件的位置坐标的x x、y y值,它们的默认值为值,它们的默认值为0 0。而而geometry()geometry()和和frameGeometry()frameGeometry()函数函数分别返回没有边框和包含边框的窗口分别返回没有边框和包含边框的窗口框架矩形的值,其返回值是框架矩形的值,其返回值是QRectQRect类型类型的,就是一个矩形,它的形式是(位的,就是一个矩形,它的形式是(位置坐标,大小信息),也就是(置坐标,大小信息),也就是(x x,y y,宽,高)。,宽

15、,高)。9教学教资 下面在下面在int x = widget.x(); int x = widget.x(); 一行代码的标号前面点击鼠一行代码的标号前面点击鼠标左键来设置断点。标左键来设置断点。 所谓所谓断点断点,就是程序运行到该行代码时会暂停下来,从而,就是程序运行到该行代码时会暂停下来,从而可以查看一些信息,如变量值等。可以查看一些信息,如变量值等。要取消断点,只要在那个断点上再点击一下就可以了。设要取消断点,只要在那个断点上再点击一下就可以了。设置好断点后便可以按下置好断点后便可以按下F5F5或者左下角的调试按钮开始调试。或者左下角的调试按钮开始调试。在程序构建时可能会出现警告,那是因

16、为我们定义了变量在程序构建时可能会出现警告,那是因为我们定义了变量却没有使用造成的,不用管它。却没有使用造成的,不用管它。 10教学教资调试模式11教学教资下面对调试模式的几个按钮和窗口进行简单介绍:下面对调试模式的几个按钮和窗口进行简单介绍:继续按钮。程序在断点处停了下来,按下继续按钮后,程继续按钮。程序在断点处停了下来,按下继续按钮后,程序便会像正常运行一样,执行后面的代码,直到遇到下一序便会像正常运行一样,执行后面的代码,直到遇到下一个断点,或者程序结束。个断点,或者程序结束。停止调试按钮。按下该按钮后结束调试。停止调试按钮。按下该按钮后结束调试。单步跳过按钮。直接执行本行代码,然后指向

17、下一行代码。单步跳过按钮。直接执行本行代码,然后指向下一行代码。单步进入按钮。进入调用的函数内部。单步进入按钮。进入调用的函数内部。单步跳出按钮。当进入函数内部时,跳出该函数,一般与单步跳出按钮。当进入函数内部时,跳出该函数,一般与单步进入配合使用。单步进入配合使用。12教学教资n从变量监视器中可以看到从变量监视器中可以看到x x、y y、geometrygeometry和和frameframe四个变量初始值都四个变量初始值都是一个随机未知数。等到调试完成后,是一个随机未知数。等到调试完成后,x x、y y的值均为的值均为0 0,这是它们的,这是它们的默认值。而默认值。而geometrygeo

18、metry的值为的值为640x480+0+0640x480+0+0,frameframe的值为的值为639x479+0+0639x479+0+0。n现在对这些值还不是很清楚,不过,为什么现在对这些值还不是很清楚,不过,为什么x、y的值会是的值会是0呢?我们呢?我们可能会想到,应该是窗口没有显示的原因,那么就更改代码,让窗口可能会想到,应该是窗口没有显示的原因,那么就更改代码,让窗口先显示出来,再看这些值。在先显示出来,再看这些值。在QWidget widget;一行代码后添加一行一行代码后添加一行代码:代码: widget.show();n注意:注意:widget.show();不能加在不能加

19、在widget.frameGeometry()widget.frameGeometry()之后,否则之后,否则值还是不变。值还是不变。程序调试程序调试13教学教资使用使用qDebug()qDebug()函数函数 一在程序调试过程中也常用一在程序调试过程中也常用qDebug()qDebug()函数,它可以将调试信息直接输函数,它可以将调试信息直接输出到控制台,在出到控制台,在Qt CreatorQt Creator中是输出到应用程序输出栏中是输出到应用程序输出栏 。例如:。例如: QWidget widget; QWidget widget; widget.resize(400, 300); /

20、 widget.resize(400, 300); / 设置窗口大小设置窗口大小 widget.move(200, 100); / widget.move(200, 100); / 设置窗口位置设置窗口位置 widget.show(); widget.show(); int x = widget.x(); int x = widget.x(); qDebug(x: %d, x); / qDebug(x: %d, x); / 输出输出x x的值的值 int y = widget.y(); int y = widget.y(); qDebug(y: %d, y); qDebug(y: %d, y)

21、; QRect geometry = widget.geometry(); QRect geometry = widget.geometry(); QRect frame = widget.frameGeometry(); QRect frame = widget.frameGeometry(); qDebug() geometry: geometry frame: frame; qDebug() geometry: geometry frame: frame;14教学教资 这里使用了两种输出方式:这里使用了两种输出方式:n方式一:直接将字符串当做参数传给方式一:直接将字符串当做参数传给qDe

22、bug()函数,例如上面使用函数,例如上面使用这种方法输出这种方法输出x和和y的值的值(不需要(不需要头文件头文件)。n方式二:使用输出流的方式一次输出多个值,它们的类型可以不同,方式二:使用输出流的方式一次输出多个值,它们的类型可以不同,例如程序中输出例如程序中输出geometry和和frame的值的值(需要(需要头文件头文件)。n说明:说明:因为第一种方法很麻烦,所以因为第一种方法很麻烦,所以经常使用的是第二种方法经常使用的是第二种方法。n从输出信息中,可以清楚的看到几个函数的含义了。从输出信息中,可以清楚的看到几个函数的含义了。 15教学教资nqDebug()qDebug()函数的第二种

23、方法时还可以让输出自动换行。在函数的第二种方法时还可以让输出自动换行。在return a.exec();return a.exec();一行代码前添加如下代码:一行代码前添加如下代码:qDebug() pos: widget.pos() endl rect: widget.rect()qDebug() pos: widget.pos() endl rect: widget.rect() endl size: widget.size() endl width: endl size: widget.size() endl width: widget.width() endl height: wid

24、get.height(); widget.width() endl height: show();n在mywidget.cpp文件的MyWidget类的构造函数中使用connect()关联按钮单击信号和自定义的槽如下:connect(ui-showChildButton, SIGNAL(clicked(), this, SLOT(showChildDialog();22教学教资说明:n这里自定义了一个槽,槽必须声明为这里自定义了一个槽,槽必须声明为slots,这里使用了,这里使用了public slots,表明这个槽可以在类外被调用。,表明这个槽可以在类外被调用。 nclicked()信号在信

25、号在QPushButton类中进行了定义,而类中进行了定义,而connect()是是QObject类中的函数,因为我们的类继承自类中的函数,因为我们的类继承自QObject,所以可以直接使用它。,所以可以直接使用它。 nconnect()函数中的四个参数分别是:发送信号的对象、函数中的四个参数分别是:发送信号的对象、发送的信号、接收信号的对象和要执行的槽,而信号和槽发送的信号、接收信号的对象和要执行的槽,而信号和槽要分别使用要分别使用SIGNAL()和和SLOT()宏括起来。宏括起来。 23教学教资模态和非模态对话框模态和非模态对话框n模态模态对话框就是在我们没有关闭它之前,不能再与同一个应用

26、程序的其他窗对话框就是在我们没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互,比如新建项目时弹出的对话框。要想使一个对话框成为模态对口进行交互,比如新建项目时弹出的对话框。要想使一个对话框成为模态对话框,只需要调用它的话框,只需要调用它的exec()exec()函数:函数:QDialog dialog(this);QDialog dialog(this);dialog.exec();dialog.exec();n而对于而对于非模态非模态对话框,既可以与它交互,也可以与同一程序中的其他窗口交对话框,既可以与它交互,也可以与同一程序中的其他窗口交互,例如互,例如Microsoft Word

27、Microsoft Word中的查找替换对话框。要使一个对话框成为非模态中的查找替换对话框。要使一个对话框成为非模态对话框,我们就可以使用对话框,我们就可以使用newnew操作来创建,然后使用操作来创建,然后使用show()show()函数来显示。函数来显示。 QDialog *dialog = new QDialog(this);QDialog *dialog = new QDialog(this);dialog-show();dialog-show();24教学教资 使用使用show()show()函数也可以建立模态对话框,只需在其前面使用函数也可以建立模态对话框,只需在其前面使用setM

28、odal()setModal()函数函数即可。例如:即可。例如:QDialog *dialog = new QDialog(this);QDialog *dialog = new QDialog(this);dialog-setModal(true);dialog-setModal(true);dialog-show();dialog-show();现在运行程序,可以看到生成的对话框是模态的。但是,它与用现在运行程序,可以看到生成的对话框是模态的。但是,它与用exec()exec()函数函数时的效果是不一样的。这是因为调用完时的效果是不一样的。这是因为调用完show()show()函数后会立即

29、将控制权交给调函数后会立即将控制权交给调用者,那么程序可以继续往下执行。而调用用者,那么程序可以继续往下执行。而调用exec()exec()函数却不是这样,它只有函数却不是这样,它只有当对话框被关闭时才会返回。当对话框被关闭时才会返回。 与与setModal()setModal()函数相似的还有一个函数相似的还有一个setWindowModality()setWindowModality()函数,它有一个参数函数,它有一个参数来设置模态对话框要阻塞的窗口类型,可以是:来设置模态对话框要阻塞的窗口类型,可以是:nQt:NonModalQt:NonModal(不阻塞任何窗口,就是非模态),(不阻塞

30、任何窗口,就是非模态),nQt:WindowModalQt:WindowModal(阻塞它的父窗口和所有祖先窗口以及它们的子窗口),(阻塞它的父窗口和所有祖先窗口以及它们的子窗口),nQt:ApplicationModalQt:ApplicationModal(阻塞整个应用程序的所有窗口)。(阻塞整个应用程序的所有窗口)。 而而setModal()setModal()函数默认设置的是函数默认设置的是Qt:ApplicationModalQt:ApplicationModal。25教学教资标准对话框标准对话框 Qt Qt提供了一些常用的对话框类型,它们全部继承自提供了一些常用的对话框类型,它们全

31、部继承自QDialogQDialog类,并增加了自己类,并增加了自己的特色功能,比如获取颜色、显示特定信息等。的特色功能,比如获取颜色、显示特定信息等。 n颜色对话框颜色对话框 n文件对话框文件对话框 n字体对话框字体对话框 n输入对话框输入对话框 n消息对话框消息对话框 n进度对话框进度对话框 n错误信息对话框错误信息对话框 n向导对话框向导对话框 26教学教资标准对话框:相 关 类类 说 明静 态 函 数函 数 说 明QFileDialog类标准文件对话框getOpenFileName获得用户选择的文件名getSaveFileName获得用户保存的文件名getExistingDirecto

32、ry获得用户选择的已存在的目录名getOpenFileNames获得用户选择的文件名列表QColorDialog类标准颜色对话框getColor获得用户选择的颜色值QFontDialog类标准字体对话框getFont获得用户选择的字体QInputDialog类标准输入对话框getText标准字符串输入对话框getItem下拉表条目输入框getIntint类型数据输入对话框getDoubledouble类型数据输入对话框QMessageBox类消息对话框QMessageBox:questionQuestion消息框QMessageBox:informationInformation消息框QMes

33、sageBox:warningWarning消息框QMessageBox:criticalCritical消息框QMessageBox:aboutAbout消息框QMessageBox:aboutQtAbout Qt消息框27教学教资标准文件对话框getOpenFileName()函数返回用户选择的文件名。但是当用户在选择文件时,如果选择“取消”(Cancel),则返回一个空串。在此只详细说明getOpenFileName()静态函数各个参数的作用,其他文件对话框类中相关的静态函数的参数有与其类似之处。其函数形式如下:QStringQFileDialog:getOpenFileName(QWi

34、dget*parent=0,/标准文件对话框的父窗口constQString&caption=QString(),/标准文件对话框的标题名constQString&dir=QString(),/注(1)constQString&filter=QString(),/注(2)QString*selectedFilter=0,/用户选择的过滤器通过此参数返回Optionsoptions=0/选择显示文件名的格式,默认是同时显示目录与文件名)28教学教资QStrings=QFileDialog:getOpenFileName(this,openfiledialog,/,C+files(*.cpp):C

35、files(*.c):Headfiles(*.h);fileLineEdit-setText(s);添加头文件:#include标准文件对话框29教学教资颜色对话框例如:例如:QColor color = QColorDialog:getColor(Qt:red, this, tr(QColor color = QColorDialog:getColor(Qt:red, this, tr(颜色对话框颜色对话框););qDebug() color: color;qDebug() color: color; 这里使用了这里使用了QColorDialog的静态函数的静态函数getColor()来获取

36、颜色,它的三个参数来获取颜色,它的三个参数的作用分别是:设置初始颜色、父窗口和对话框标题。这里的的作用分别是:设置初始颜色、父窗口和对话框标题。这里的Qt:red,是,是Qt预定义的颜色对象。预定义的颜色对象。n如果想要更灵活的设置时,可以先创建对象,然后进行各项设置:如果想要更灵活的设置时,可以先创建对象,然后进行各项设置:void MyWidget:on_pushButton_clicked() QColorDialog dialog(Qt:red,this); / 创建对象创建对象 dialog.setOption(QColorDialog:ShowAlphaChannel); / 显示

37、显示alpha选项选项 dialog.exec(); / 以模态方式运行对话框以模态方式运行对话框 QColor color = dialog.currentColor(); / 获取当前颜色获取当前颜色 qDebug()color:setFont(f);31教学教资自学内容: 自学其他标准对话框的使用。32教学教资程序启动画面(QSplashScreen)当运行程序时,在显示屏的中央出现一个启动画面,经过一段时间,应用程序完成初始化工作后,启动画面隐去,出现程序的主窗口界面。(4) 启动画面主要在main()函数中实现,添加以下加黑代码:#include #include int main(

38、int argc, char *argv) QApplication a(argc, argv); QPixmap pixmap(:/res/myShow.jpg); QSplashScreen splash(pixmap); splash.show(); a.processEvents(); MainWindow w; w.show(); splash.finish(&w); return a.exec();33教学教资2024/7/19下面通过实现类似QQ抽屉效果来介绍QToolBox类的使用,QToolBox提供了一种列状的层叠窗体,而QToolButton提供了一种快速访问命令或选择项

39、的按钮,通常在工具条中使用。运行效果如图所示。 QToolBox类34教学教资2024/7/19(1)建立一个空工程。单击“File”-“NewFileorProject.”,在弹出的对话框中选择Projects组下的“EmptyQt4Project”,单击“OK”按钮。(2)在弹出的对话框中对该工程进行命名并选择保存的路径,这里命名为“MyQQExample”。单击“Next”按钮,最后单击“Finish”按钮,完成该文件工程的建立。(3)下面添加该工程的提供主要显示界面的函数所在的文件,在“MyQQExample”项目名上单击鼠标右键,在弹出的快捷菜单中选择“AddNew.”菜单项,在弹出

40、的对话框中选择“C+Class”选项。单击“OK”按钮,弹出“C+ClassWizard”对话框,在Baseclass后面的下拉列表框中输入基类名“QToolBox”(手工添加),在Classname后面的文本框中输入类的名称“Drawer”。(4)单击“Next”按钮,单击“Finish”按钮,添加drawer.h头文件和drawer.cpp源文件。创建步骤35教学教资2024/7/19(4)Drawer类继承自QToolBox类,打开“drawer.h”头文件,定义实例中需要用到的各种窗体控件。具体代码如下:#include#includeclassDrawer:publicQToolBo

41、xQ_OBJECTpublic:Drawer(QWidget*parent=0,Qt:WindowFlagsf=0);private:QToolButton*toolBtn1_1;QToolButton*toolBtn1_2;QToolButton*toolBtn1_3;QToolButton*toolBtn1_4;QToolButton*toolBtn1_4;QToolButton*toolBtn2_1;QToolButton*toolBtn2_2;QToolButton*toolBtn3_1;QToolButton*toolBtn3_2;创建步骤36教学教资2024/7/19(6)打开“d

42、rawer.cpp”文件,添加代码。(7)在“drawer.cpp”文件一开始加入以下头文件:#include#include(8)下面添加该工程的入口函数所在的文件(main.cpp文件),在“MyQQExample”项目名上单击鼠标右键,在弹出的快捷菜单中选择“AddNew.”菜单项,在弹出的对话框中选择“C+SourceFile”选项,单击“OK”按钮,弹出“NewC+SourceFile”对话框,在name后面的文本框中输入“main.cpp”。单击“Next”按钮,单击“Finish”按钮,添加main函数。创建步骤37教学教资2024/7/19(9)打开“main.cpp”文件,添

43、加以下代码:#include#includedrawer.h#includeintmain(intargc,char*argv)QApplicationa(argc,argv);QTextCodec:setCodecForTr(QTextCodec:codecForLocale();/显示中文Drawerdrawer;drawer.show();returna.exec();(10)编译运行此程序,此时未看到加载的图片,是因为图片放置的路径不是默认的,只要将所用到的图片放置到该工程下的debug文件夹下即可。最后运行一下程序,显示效果如图所示。创建步骤38教学教资3.3 其他窗口部件其他窗口部

44、件QtQt提供了一些常用的窗口部件:提供了一些常用的窗口部件:nQFrameQFrame类族类族 n按钮部件按钮部件 n行编辑器行编辑器n数值设定框数值设定框n滑块部件滑块部件39教学教资QFrameQFrame类族类族 nQFrameQFrame类是带有边框的部件的基类。它的子类有我们最为常用的标签类是带有边框的部件的基类。它的子类有我们最为常用的标签部件部件QLabelQLabel,另外还有,另外还有QLCDNumberQLCDNumber、QSplitterQSplitter、QStackedWidgetQStackedWidget、QToolBoxQToolBox和和QAbstract

45、ScrollAreaQAbstractScrollArea类。类。 n带边框部件最主要的特点就是可以有一个明显的边界框架。带边框部件最主要的特点就是可以有一个明显的边界框架。QFrameQFrame类类的主要功能也就是用来实现不同的边框效果,这主要是由边框形状的主要功能也就是用来实现不同的边框效果,这主要是由边框形状(ShapeShape)和边框阴影()和边框阴影(ShadowShadow)组合来形成的。)组合来形成的。 40教学教资例:例:QLabel n除了最常用的显示文本外,还可以显示图片:除了最常用的显示文本外,还可以显示图片:ui-label-setPixmap(QPixmap(F:

46、/logo.png);ui-label-setPixmap(QPixmap(F:/logo.png);n还可以显示还可以显示gifgif动态图片:动态图片:QMovie *movie = new QMovie(F:/donghua.gif);QMovie *movie = new QMovie(F:/donghua.gif);ui-label-setMovie(movie); / ui-label-setMovie(movie); / 在标签中添加动画在标签中添加动画movie-start(); movie-start(); 41教学教资按钮部件按钮部件 QAbstractButton类是按钮

47、部件的抽象基类,提供了按钮类是按钮部件的抽象基类,提供了按钮的通用功能。它的子类包括:的通用功能。它的子类包括:n复选框复选框QCheckBoxn标准按钮标准按钮QPushButtonn单选框按钮单选框按钮QRadioButtonn工具按钮工具按钮QToolButton。 42教学教资例:例:QPushButton 下面代码为三个按钮改变了显示文本下面代码为三个按钮改变了显示文本在一个字母前加上在一个字母前加上“& &”符号,那么就可以将这个按钮的加速键设置为符号,那么就可以将这个按钮的加速键设置为AltAlt加加上这个字母。如果我们要在文本中显示上这个字母。如果我们要在文本中显示“& &”符

48、号本身,那么可以使用符号本身,那么可以使用“&”可以使用可以使用setIcon()setIcon()函数来给按钮添加图标,这里图片文件使用了相对路径函数来给按钮添加图标,这里图片文件使用了相对路径(当然这个也可以在设计模式通过更改(当然这个也可以在设计模式通过更改iconicon属性来实现)。对于属性来实现)。对于pushBtn3pushBtn3,为其添加了下拉菜单。为其添加了下拉菜单。ui-pushBtn1-setText(tr(&nihao); / ui-pushBtn1-setText(tr(&nihao); / 这样便指定了这样便指定了Alt+NAlt+N为加速键为加速键ui-push

49、Btn2-setText(tr(ui-pushBtn2-setText(tr(帮助帮助(&H);(&H);ui-pushBtn2-setIcon(QIcon(./image/help.png);ui-pushBtn2-setIcon(QIcon(./image/help.png);ui-pushBtn3-setText(tr(z&oom);ui-pushBtn3-setText(tr(z&oom);QMenu *menu = new QMenu(this);QMenu *menu = new QMenu(this);menu-addAction(QIcon(./image/zoom-in.pn

50、g), tr(menu-addAction(QIcon(./image/zoom-in.png), tr(放大放大););ui-pushBtn3-setMenu(menu);ui-pushBtn3-setMenu(menu); 43教学教资行编辑器行编辑器 行编辑器QLineEdit部件是一个单行的文本编辑器,它允许用户输入和编辑单行的纯文本内容,而且提供了一系列有用的功能,包括撤销与恢复、剪切和拖放等操作。 例如:n显示模式显示模式 n输入掩码输入掩码 n输入验证输入验证 n自动补全自动补全 44教学教资例:自动补全功能例:自动补全功能 在在QLineEditQLineEdit中也提供了强大

51、的自动补全功能,这是利用中也提供了强大的自动补全功能,这是利用QCompleterQCompleter类实现的:类实现的:QStringList wordList;wordList Qt Qt Creator setCaseSensitivity(Qt:CaseInsensitive); ui-lineEdit4-setCompleter(completer);45教学教资数值设定框数值设定框 QAbstractSpinBoxQAbstractSpinBox类是一个抽象基类,它提供了一个数值类是一个抽象基类,它提供了一个数值设定框和一个行编辑器来显示设定值。它有三个子类:设定框和一个行编辑器来

52、显示设定值。它有三个子类:nQDateTimeEditQDateTimeEdit(日期时间设定)(日期时间设定)nQSpinBoxQSpinBox(整数设定)(整数设定)nQDoubleSpinBoxQDoubleSpinBox(浮点数的设定)(浮点数的设定) 46教学教资例: QDateTimeEditQDateTimeEdit 下面的代码设置了下面的代码设置了dateTimeEditdateTimeEdit中的日期和时间。这里简单说明一下:中的日期和时间。这里简单说明一下:y y表示表示年;年;M M表示月;表示月;d d表示日,而表示日,而dddddd表示星期;表示星期;H H表示小时,

53、使用表示小时,使用2424小时制显示,小时制显示,而而h h也表示小时,如果最后有也表示小时,如果最后有AMAM或者或者PMPM的,则是的,则是1212小时制显示,否则使用小时制显示,否则使用2424小小时制;时制;m m表示分;表示分;s s表示秒;还有一个表示秒;还有一个z z可以用来表示毫秒。可以用来表示毫秒。 / 设置时间为现在的系统时间设置时间为现在的系统时间ui-dateTimeEdit-setDateTime(QDateTime:currentDateTime();/ 设置时间的显示格式设置时间的显示格式ui-dateTimeEdit-setDisplayFormat(tr(yy

54、yy年年MM月月dd日日ddd HH时时mm分分ss秒秒);47教学教资2024/7/19QDateTime类在Qt4中,可以用QDateTime类来获得系统时间。通过QDateTime:currentDateTime ()来获取本地系统的时间和日期信号。可以通过date()和time()来返回datetime中的日期和时间部分。以下是一个测试程序的例子:#include QLabel*datalabel=newQLabel();QDateTime*datatime=newQDateTime(QDateTime:currentDateTime();datalabel-setText(datat

55、ime-date().toString();datalabel-show();48教学教资2024/7/19QTimer类(可以用于更新时间等)定时器(Qtimer)的使用非常简单,只需要以下几个步骤就可以完成定时器的应用:#include (1)产生一个定时器。QTimer *time_clock=new QTimer();(2)连接这个定时器的信号和槽,利用定时器的timeout()。connect(time_clock,SIGNAL(timeout(),this,SLOT(slottimedone();(3)开始定时器,并设定定时周期。定时器有两种:start(int time)和set

56、SingleShot(true)。常用前者:time_clock-start(2000);49教学教资2024/7/19滑块部件滑块部件编辑整形数据有许多可选的控件同时也有许多用于double型,time型和date型的控件信号 valueChanged(int) 当数值更新时发出属性value 当前值maximum 最大值minimum 最小值QSliderQScrollBarQDialQSpinBoxQAbstractSlider50教学教资3.4 小结小结 本章讲述了众多常用的窗口部件的使用方法,其中还涉及本章讲述了众多常用的窗口部件的使用方法,其中还涉及了程序调试和信号和槽等知识。学习本章,一定要多实践,了程序调试和信号和槽等知识。学习本章,一定要多实践,多运用各个部件进行编程,才能真正掌握!多运用各个部件进行编程,才能真正掌握!n如何设置窗口类型,获取窗口信如何设置窗口类型,获取窗口信息的函数有哪些?息的函数有哪些?n如何使用调试模式,如何使用调试模式,qDebug()函函数的用法?数的用法?n什么是信号和槽,有哪些关联方什么是信号和槽,有哪些关联方式?式?nQt中标准对话框、常用部件有哪中标准对话框、常用部件有哪些,都有哪些特色功能?些,都有哪些特色功能?51教学教资

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号