QT编程课件 第五章 应用程序主窗口
第5章 使用Qt基本GUI工具
如果你是自己采用编译源代码的方式安装 Qt,并且没有设置快捷方式的话,你可以从 命令行启动 Qt Designer。方法是进入到命令行方式,或者打开一个终端,进入你 Qt 安装 的目录,以笔者的 Red Flag 为例,进入 /usr/bin/目录,输入 ./designer-qt4,即可启 动 Qt Designer。
注意,不同的 Linux 发行版的菜单设置以及可执行文件命名可能会有所不同。
3.设置 Qt Designer
启动 Qt Designer 后,首先需要需要对它进行设置。
Qt Designer 支持两种界面排列形式:一种是多个顶极窗口并列分布形式;一种是与
Windows 上常见的 IDE 类似的单窗口(即多停靠窗锚接)形式。 多个顶级窗口的样子如图 5-2 所示,Qt Designer 的各个子窗口都作为独立的顶级窗口
名称与图标
功能
新建窗体
打开窗体 保存窗体
表 5-3 示出了编辑工具栏功能说明。
表 5-3 编辑工具栏功能说明
名称与图标
功能
撤销上一次操作
恢复操作
剪切 复制 粘贴 放到后面 放到前面 编辑窗口部件 编辑信号/槽 编辑伙伴 编辑标签顺序
表 5-4 示出了窗体布局工具栏功能说明。
表 5-4 窗体布局工具栏功能说明
表 5-5 窗口部件的属性设置
部件类别
objectName
text(WindowTitle)
Widget
myForm
布局示例
Label
label_name
姓名
Label
label_phone
电话
LineEdit
lineEdit_name
QT编程介绍PPT课件
10、优越的绘画功能 Qt的绘画工具QPainter类,在任意一个绘图设备上都可以润色 图形。绘图设备包括组件、像素映射、图形文件和打印机,相 同的代码可以用在4种不同类型的设备上。 QPainter类支持复 杂的同等系统的转换,很容易在所有平台上画旋转文本和像素 映射 11、绘制2D/3D图形功能
QT优越性
8、高性能的工具 对于库来讲,它的有效性远超过应用性。为了提高Qt库的有
效性、快捷性,对其进行了优化,Qt能执行一些基本的任务, 比如图形的润色,比一般的基于平台的代码要快。Qt是基于 Xlib, 而不依赖Motif工具包。 可用户化的外观 9、Qt支持主题 所以基于Qt的应用软件能在Mac外观、 Windows等外 观主题之间互换,甚至改变运行时间。这些应用程序不管是在X
4、尝试运行,成功则说明环境 配置成功
QT程序实例
MenuBar
ToolBar
Group1:图像显示区域
Group2:文字测试区域
Group3:选择按钮测试区域 StatusBar
MenuBar:
ToolBar:
中心组件:
图像显示组:
选择功能组件:
文字功能组件:
StatusBar:
3. 丰富的 API
Qt 包括多达 500 个以上的 C++ 类,还替供基于模板的 collections,serialization, file, I/O device, directory management, date/time 类。甚至还包括 正则表达式的处理功能。
4. 大量的开发文档
Network/XML/OpenGL/Database/webkit/...
qt ppt课件
Qt的QTcpSocket类
01
02
03
功能
QTcpSocket类提供了TCP 套接字的功能,用于建立 客户端与服务器之间的连 接,发送和接收数据。
特点
QTcpSocket类提供了丰 富的接口,用于控制连接 状态、发送和接收数据, 以及处理网络错误等。
使用场景
适用于开发需要与服务器 进行通讯的客户端应用程 序,如网络游戏、远程桌 面等。
Qt PPT课件
汇报人:XXX
202X-12-31
REPORTI念 • Qt的界面开发 • Qt的数据库操作 • Qt的网络编程 • Qt的多媒体编程
目录
XXX
PART 01
Qt简介
REPORTING
Qt的发展历程
01
02
桌面应用程序开发
移动应用程序开发
Qt 广泛应用于各种桌面应用程序的开发, 如办公软件、图像处理等。
Qt 也适用于开发 Android 和 iOS 应用程 序,以及跨平台移动应用程序。
嵌入式系统开发
游戏开发
Qt/Embedded 适用于嵌入式系统的 GUI 开发,具有轻量级和高效的特点。
Qt 的图形渲染能力使其成为游戏开发的理 想选择,如 2D 游戏和简单 3D 游戏。
pause(): 暂停播放。
Qt的QMediaPlayer类
stop(): 停止播放。 setMedia(): 设置要播放的媒体文件。
Qt的QAudioOutput类
在此添加您的文本17字
功能描写:QAudioOutput类是用于处理音频输出的类。 它提供了控制音频输出的接口,如音量控制、音频流等。
功能描写:QVideoWidget类是用于显示视频的类。它 可以嵌入到Qt应用程序中,提供视频播放和控制的界 面。 show(): 显示视频。
Qt__主窗口、菜单和工具条(QMainWindow,QMenu,QToolBar)
Qt__主窗⼝、菜单和⼯具条(QMainWindow,QMenu,QToolBar)转⾃主窗⼝##Qt的GUI程序有⼀个常⽤的顶层窗⼝,叫做MainWindow。
MainWindow继承⾃QMainWindow。
QMainWindow窗⼝分成⼏个主要的区域:最上⾯是Window Title,⽤于显⽰标题和控制按钮,⽐如最⼤化、最⼩化和关闭等;下⾯⼀些是Menu Bar,⽤于显⽰菜单;再下⾯⼀点事Toolbar areas,⽤于显⽰⼯具条,注意,Qt的主窗⼝⽀持多个⼯具条显⽰,因此这⾥是ares,你可以把⼏个⼯具条并排显⽰在这⾥,就像Word2003⼀样;⼯具条下⾯是Dock window areas,这是停靠窗⼝的显⽰区域,所谓停靠窗⼝就是像Photoshop的⼯具箱⼀样,可以在主窗⼝的四周显⽰;再向下是Status Bar,就是状态栏;中间最⼤的Central widget就是主要的⼯作区了。
菜单和⼯具条##QMainWindow的基础之上添加菜单和⼯具条。
Qt⾥⾯有⼀个类,叫做QAction。
顾名思义,QAction类保存有关于这个动作,也就是action的信息,⽐如它的⽂本描述、图标、快捷键、回调函数(也就是信号槽),等等。
神奇的是,QAction能够根据添加的位置来改变⾃⼰的样⼦——如果添加到菜单中,就会显⽰成⼀个菜单项;如果添加到⼯具条,就会显⽰成⼀个按钮。
添加⼀个打开命令。
那么,就在头⽂件⾥⾯添加⼀个私有的QAction变量:class QAction;//...private:QAction *openAction;//...注意,不要忘记QAction类的前向声明哦!要不就会报错的!然后我们要在cpp⽂件中添加QAction的定义。
为了简单起见,我们直接把它定义在构造函数⾥⾯:openAction = new QAction(tr("&Open"), this);openAction->setShortcut(QKeySequence::Open);openAction->setStatusTip(tr("Open a file."));第⼀⾏代码创建⼀个QAction对象。
【精品课程】Qt Creator快速入门教程课件第5章应用程序主窗口
colorMenu->addAction(tr("绿色"));
toolBtn->setMenu(colorMenu);
// 添加菜单
toolBtn->setPopupMode(QToolButton::MenuButtonPopup); // 设置弹出模式
ui->nToolBar->addWidget(toolBtn);
快速入门教程
这一章开始接触应用程序主窗口的相关内容。对于日常见到的应用 程序而言,它们中的许多都是基于主窗口的,主窗口中包含了菜单栏 、工具栏、状态栏和中心区域等。本章会详细介绍主窗口的每一个部 分,还会涉及到资源管理、富文本处理、拖放操作和文档打印等相关 内容。
在Qt中提供了以QMainWindow类为核心的主窗口框架,它包含了 众多相关的类:
菜单栏
QMenuBar类提供了一个水平的菜单栏,在QMainWindow中可以直接获取它的 默认存在的菜单栏,向其中添加QMenu类型的菜单对象,然后向弹出菜单中 添加QAction类型的动作对象。
在QMenu中还提供了间隔器,可以在设计器中向添加菜单那样直接添加间隔 器,或者在代码中使用addSeparator()函数来添加,它是一条水平线,可以 将菜单分成几组,使得布局很整齐。
在设计器中给菜单栏、工具栏添加动作
在Qt Creator中双击项目中的.ui文件进入设计模式。 添加菜单,双击左上角的“在这里输入”,修改为“文件(&F)”,这里要使
用英文半角的括号,“&F”被称为加速键,表明程序运行时,可以按下Alt+F 键来激活该菜单。修改完成后,按下回车键,并在弹出的下拉菜单中,将第 一项改为“新建文件(&N)”并按下回车键。 这时可以看到在下面的Action编辑器中已经有了“新建文件”动作。 在这里用鼠标点击该动作,将其拖入菜单栏下面的工具栏中。
QT编程课件应用程序主窗口教学提纲
// 创建QSpinBox QSpinBox *spinBox = new QSpinBox(this);
// 向工具栏添加QSpinBox部件 ui->mainToolBar->addWidget(spinBox);
QMidArea
QToolBar
QStatusBar QSizeGrip
QMenu
QMidSubWindow
QTextBrowser
主程序窗口框架
菜单栏
工具栏
中心部件
Dock部件
状态栏
一个widget就是一个窗口, Qt提供一个QMainWindow类
管理主窗口程序
菜单栏
• Desinger中编辑菜单
ui->mdiArea->addSubWindБайду номын сангаасw(edit);
child->setWindowTitle(tr("多文档编辑器子窗口"));
// 显示子窗口 child->show();
Dock部件
QDockWidget
可以停靠在中心部件的旁边 可以悬浮在主窗口上面 就像一个工具箱,放置其他部件
富文本处理
• 富文本—文档中可以使用颜色,字体,表格等多种格式。
• QTextEdit是一个高级的所见即所得的支持使用HTML风格标记 的多信息文本格式的查看器/编辑器。
QTextEdit
QTextCursor
QTextDocument
QTextFrameFormat QTextBlockFormat QTextTableFormat
Qt-Creator快速入门-第5章-应用程序主窗口
第一步,添加Qt资源文件。往项目中添加新文件,选择Qt分类中的Qt资源文件,文件 名称改为“myImage”,其他选项默认即可。 第二步,添加资源。建立好资源文件后会默认进入资源管理界面,就是新建的 myImage.qrc文件中。现在先到项目文件夹myMainWindow中新建一个名为 “images”的文件夹,并在其中放入两张图标图片,比如这里放入了一个“new.png” 和一个“open.png”图片。(注意:Qt的资源系统要求资源文件必须放在与qrc文件同 级或子级目录下,如果放在其他地方,当添加资源时会提示将文件复制到有效的位 置。) 然后回到Qt Creator中,在资源管理界面,按下“添加”按钮,选择“添加前 缀”,然后将属性栏中的前缀改为“/myImage”,再点击“添加”按钮,选择“添加 文件”,在弹出的对话框中进入到前面新建的images文件夹中,选中那两张图片,点 击打开即可。这时myImage.qrc文件中就出现了添加的图片的列表。最后按下Ctrl+S 快捷键,保存对文件的修改(注意:这一点很重要,如果没有保存,在下面使用图片 时将看不到图片)。
在设计器中可以查看QToolBar的属性栏,其中toolButtonStyle属性 设置图标和相应文本的显示及其相对位置等;movabel属性设置状态 栏是否可以移动;allowedArea设置允许停靠的位置;iconsize属性
设置图标的大小;floatable属性设置是否可以悬浮。
பைடு நூலகம்
在工具栏中添加部件
菜单栏
QMenuBar类提供了一个水平的菜单栏,在QMainWindow中可以直接获取它的 默认存在的菜单栏,向其中添加QMenu类型的菜单对象,然后向弹出菜单中 添加QAction类型的动作对象。 在QMenu中还提供了间隔器,可以在设计器中向添加菜单那样直接添加间隔 器,或者在代码中使用addSeparator()函数来添加,它是一条水平线,可以 将菜单分成几组,使得布局很整齐。 在应用程序中很多普通的命令都是通过菜单来实现的,而我们也希望能将这 些菜单命令放到工具栏中,以方便使用。QAction就是这样一种命令动作, 它可以同时放在菜单和工具栏中。一个QAction动作包含了一个图标,一个 菜单显示文本,一个快捷键,一个状态栏显示文本,一个“What’s This?” 显示文本和一个工具提示文本。这些都可以在构建QAction类对象时在构造 函数中指定。 另外还可以设置QAction的checkable属性,如果指定这个动作的checkable 为true,那么当选中这个菜单时就会在它的前面显示“√”之类的表示选中 状态的符号,如果该菜单有图标,那么就会用线框将图标围住,用来表示该 动作被选中了。
qt教程(ppt)ppt课件
信号和槽
补充: <1> 一个信号可以连接多个槽 <2> 多个信号可以连接一个槽 <3> 一个信号可以与另外一个信号相连接 当发射第一个信号的时候,也会发射第二个信号。 <4>当删除对象的时候,Qt会自动的移除和这个对
象相关的所有连接。 结合前面的例子: 是不是任意的信号和槽都可以进行连接呢?
信号和槽
Hale Waihona Puke QT编程环境• <1>QT的工具 $QTDIR/bin
• <2>QT的库 $QTDIR/lib
• <3>QT的头文件 $QTDIR/include
QT编程环境
• QTDIR • QMAKESPEC • PATH
例子一:hello world
<1> 检查有没有 qmake。 <2> 建立一个新的文件夹,命名为hello。 <3> 创建一个新的源程序文件 hello.cpp,编
动作已经发生或者是一个状态已经改变。 <4> 把窗口部件发射的信号和一个函数连接起来
QObject::connect(button,SIGNAL(clicked()),&app, SLOT(quit()))。
例子三:输入用户年龄
<1> 功能:用户可以通过微调框和滑块来输 入年龄
<2> 创建一个新的文件夹,命名为age <3> 创建age.cpp,编辑代码 <4>编译运行
整个应用程序所用到的资源。 <3> 创建了一个QLabel类的对象,也可以叫做窗
口部件。 <4> 创建窗口部件的时候,标签(QLabel)通常都是
Qt编程培训课件
Qtopia添加线程支持
由于qtopia 2.2.0的makefile里的问题,现在只能自己手 动编译出支持thread的libqte-mt.so.*
– 进入qtopia-2.2.0-FriendlyARM/qt2目录手动配置来支持multithread – 如果编译的是x86版本那么执行./configure -embedded -no-xft qconfig qpe -depths 16,32 -system-jpeg -gif -thread – 如果编译的是arm版本那么执行./configure -embedded -no-xft qconfig qpe -depths 16,32 -system-jpeg -qt-zlib -qt-libpng -gif no-g++-exceptions -no-qvfb -xplatform linux-arm-g++ -tslib thread – 上面的步骤执行后会在当前目录下产生src-mt.mk文件,用编辑 器将其内容的最后一行”cd src; $(MAKE) clean“删除或注释掉 – 编译libqte-mt:make src-mt
Qt2包含的模块
QtCore QtGui QtNetWork QtOpenGL QtSql QtSvg QtXML QtDesigner QtUiTool Qt3Support QtAssistant 和图形无关的核心模块 所有的图形模块 网络相关的模块 支持OpenGL QT支持数据库开发模块 定义和生成SVG类 读取XML文件模块 Qt的图形界面设计 定义在应用程序中直接处理ui文件的类 Qt3版本的支持 定义和扩展Qt设计器的类
Qt的第五章
4.工具栏 可将Action对象添加到工具栏中。 也可通过代码,将窗口部件添加到工具栏 中。 QToolBar::addWidget()
5.1.2 中心部分 可以放置一个中心部件,如TextEdit或 TextBrowser、WebView,也可以用MidArea 、Tab Widget、Stacked Widget等 也可以像Dialog一样使用
工具栏(QToolBar) 用于显示常用的菜单项目,也可以插入其 他窗口部件,工具栏位置可变。一个主窗 口可拥有多个工具栏。
中心部分(Central Widget) 程序主要功能实现区域,可放入窗口部件 。一个主窗口只能有一个中心部分。 Dock部件(QDockWidget) 停靠窗口,如工具箱。可有多个Dock部件 。 状态栏(QStatusBar) 在底部,用于显示状态信息,只有有一个 。
QTextDocument::firstBlock()——文本框中第 一个文本块 QTextDocument::blockCount()——文本框的文 本块数量
QTextBlock::firstLineNumber()——文本块首行 行号 QTextBlock::length()——文本块长度
5.2.4 查找功能 利用TextEdit控件的find()函数进行查找
5.2.5 语法高亮与HTML
略
5.3 拖放操作 来自拖放操作分为Drag和Drop两个动作 当数据拖动时会被存储为MIME类型,使用 QMimeData类来表示MIME数据,并使用 QDrag类来完成数据的转移。 可通过鼠标事件和拖放事件完成。
Qt 5开发及实例 第5章 Qt 5主窗口
02
【综合实例】文本编辑器
【综合实例】文本编辑器
(1)文件操作功能:包括新建一个文件,利用标准文件对话框QFileDialog类打开一个已存在的文件, 利用QFile和QTextStream读取文件内容,打印文件(分文本打印和图像打印)。通过实例介绍标准打印 对话框QPrintDialog类的使用方法,以QPrinter作为QPaintDevice画图工具实现图像打印。
(6)主函数ImgProcessor类声明中的createActions()函数用于创建所有的动作、createMenus()函数用于 创建菜单、createToolBars()函数用于创建工具栏;接着声明实现主窗口所需的各个元素,包括菜单、工具 栏及各个动作等;最后声明用到的槽函数,打开“imgprocessor.h”文件,添加如下代码。
【综合实例】文本编辑器
基本元素
1.菜单栏 菜单是一系列命令的列表。为了实现菜单、工具栏按钮、键盘快捷方式等命令的一致性,Qt使用动作 (Action)来表示这些命令。Qt的菜单就是由一系列的QAction动作对象构成的列表,而菜单栏则是包容菜 单的面板,它位于主窗口标题栏的下面。一个主窗口只能有一个菜单栏。 2.状态栏 状态栏通常显示GUI应用程序的一些状态信息,它位于主窗口的底部。用户可以在状态栏上添加、使用 Qt窗口部件。一个主窗口只能有一个状态栏。 3.工具栏 工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令(动作)组成。 工具栏位于菜单栏的下面、状态栏的上面,可以停靠在主窗口的上、下、左、右四个方向上。一个主窗口 可以包含多个工具栏。
(2)图像处理软件中的常用功能:包括图片的缩放、旋转、镜像等坐标变换,使用QMatrix实现图 像的各种坐标变换。
QT5自学教程 5
QT5自学教程(5)——显示窗口在正式给出例子之前,我们首先要介绍几个重要的概念。
这些概念还是蛮重要的,笔者愿与诸君一同进行回顾。
1. Q: 什么是mainwindow?A: mainwindow也就是主窗口。
简单的说主窗口就是进入程序后呈现全面功能的主要界面,其中包括了菜单,工具条,状态栏和其他一些元素。
例如,进入Qt的界面就是一个主窗口。
2. Q:什么是dialog?A:dialog也就是对话框。
在图形用户界面中,对话框是一种特殊的视窗, 用来在用户界面中向用户显示信息,或者在需要的时候获得用户的响应。
之所以称之为“对话框”是因为它们使计算机和用户之间构成了一个对话——或者是通知用户一些信息,或者是请求用户的输入,或者两者皆有。
3. Q:Model对话框和Modeless对话框是指什么?A:严格地讲,只存在一种对话框,但是却存在不同的显示方式。
即Model(模式或称模态)和Modeless(非模式或称非模态)。
非模态对话框指的是:这是一种非强制回应的对话框,用于向用户请求非必须资料。
即可以不理会这种对话框或不向其提供任何信息而继续进行当前工作,所以窗口均可打开并处于活动状态或是获得焦点(人机交互热点)。
一类无模式对话框表现为工具栏,比如设置用于文字颜色的设置。
查找/替换对话框可算是无模式对话框,也可以设计为工具栏。
模态对话框指的是:这种对话框强制要求用户回应,否则用户不能再继续进行操作,直到与该对话框完成交互。
这种对话框设计用于需要一些额外的信息,然后才可以继续进行的操作,或可能只想确认使用者想要进行一项具有潜在危险性的操作。
有模式对话框一般被视为坏的设计方案,因为以一种用户不喜欢看到方式出现,或是被习惯不去注意对话框提示的用户忽略,导致无法避免危险操作。
在了解了上面的一些概念之后我们将给出我们的例子,例子分为两个部分进行讲解。
第一个部分中展示了创建一个主窗口并且在其中对部件进行布局的操作;第二部分则是窗口模态和非模态的展示。
Qt开发入门教程07_Qt主窗口程序
Qt主窗口程序⏹QMainWindow ⏹创建菜单和工具栏⏹实现菜单命令项⏹Qt文件操作⏹QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。
⏹主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。
一个简单主窗口程序1.#include<QTextEdit>2.#include<QMainWindow>3.#include<QApplication>4.int main(int argc,char*argv[])5.{6.QApplication app(argc,argv);7.QMainWindow*mw=new QMainWindow;8.QTextEdit*edit=new QTextEdit(mw);9.edit->setFocus();10.mw->setCentralWidget(edit);11.mw->show();12.return app.exec();13.}⏹QWidget QMainWindow QDialog区别⏹QWidget类是所有用户界面对象的基类。
⏹窗口部件是用户界面的一个基本单元:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己。
每一个窗口部件都是矩形的,并且它们按Z轴顺序排列。
一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。
⏹QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。
⏹QDialog类是对话框窗口的基类。
⏹对话框窗口是主要用于短期任务以及和用户进行简要通讯的顶级窗口。
QDialog可以是模态对话框也可以是非模态对话框。
QDialog支持扩展性并且可以提供返回值。
它们可以有默认按钮。
QDialog也可以有一个QSizeGrip在它的右下角,使用setSizeGripEnabled()。
Qt入门培训PPT课件
Qt的代码结构--Hello World
#include <QApplication> #include <QLabel> int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); }
信号(Signal)与槽(Slot)初探
类似于windows中的消息和消息响应 都是通过C++类成员函数实现的
信号和槽是通过连接实现相互关联的 包含信号或槽的类必须从QObject继承
信号(Signal)与槽(Slot)初探
emit clicked();
信号(Signal)与槽(Slot)初探
使用设计器拖放部件粗略地放置部件在窗体上使用设计器从里到外进行布局添加必要的弹簧选中每一个groupbox应用垂直布局管理使用设计器从里到外进行布局添加必要的弹簧选中labelclick选中comboboxctrlclick使用设计器从里到外进行布局添加必要的弹簧应用一个水平布局管理使用设计器从里到外进行布局添加必要的弹簧选中2个groupbox并进行布局管理使用设计器进行信号连接部件之间slot编辑模式在connectionsdock中查看结果使用设计器进行信号连接到你的代码中在widgetediting模式中2
Qt的代码结构--Hello World
#include <QApplication> #include <QLabel> int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); }
第5章 应用程序主窗口(3课时)资料
setShortcut()设置快捷键 setStatusTip()设置状态提示 setIcon(QIcon(“图片路径”))
QAction::triggered ( ) 【信号】当在此动作中单击鼠标,则发送该信号。
菜单栏QMenuBar
QAction *openAction;
void QMainWindow::addToolBar ( Qt::ToolBarArea area, QToolBar * toolbar ); void QMainWindow::addToolBar ( QToolBar * toolbar ); 已创建了工具栏(QToolBar)对象时,将工具栏对象添加到QMainWindow 对象中。其中· : toolbar为已定义好的工具栏对象指针, area工具栏表示的位置,此形参为枚举型变量。共4种,即左右上下: Qt::LeftToolBarArea 0x1 Qt::RightToolBarArea 0x2 Qt::TopToolBarArea 0x4 Qt::BottomToolBarArea 0x8
工具栏QToolBar类
工具栏QToolBar类提供了一个包含了一组控件的可以移动的面板,它 用于提供常用命令或者选项的快速访问。
QToolBar是QDockWindow的特殊化,并且提供QDockWindow的 所有功能。
可以使用绝大多数窗口部件,最常用QToolButton和QComboBox。
使用addAction()添加部件。
工具栏QToolBar类
属性:
toolButtonStyle:设置图标和相应文本的显示及其相对位置等; Movabel:设置状态栏是否可以移动; allowedArea:设置允许停靠的位置; Iconsize:属性设置图标的大小;
QT5:窗口界面框架
QT5:窗⼝界⾯框架在项⽬Application中:QT Widgets Application(桌⾯QT应⽤)QT Console Application(控制台QT应⽤)QT for Python-Empty / Window(⽤Python开发QT应⽤)QT Quick Application-Empty / Scroll / Stack /Swipe(移动平台开发QT应⽤)⼀.QWidgetWidget 窗⼝主要是在上⾯放置布局和控件,可以嵌⼊到主窗体中QWidget widget;widget.setWindowTitle(QObject::tr("k5"));widget.resize(400, 300);widget.move(200, 100);widget.show();int x = widget.x();qDebug("x:%d", x);int y = widget.y();qDebug("y:%d", y);1.窗体框架// widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>namespace Ui {class Widget;}class Widget : public QWidget{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;};#endif// WIDGET_H// widget.cpp#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);}Widget::~Widget(){delete ui;}// main.cpp#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ //主应⽤程序对象,只能有⼀个QApplication a(argc, argv); //继承⽗类QWidgetWidget w; //窗⼝对象默认不显⽰,必须调⽤show()⽅法显⽰窗⼝w.show(); //进⾏消息循环,后⾯代码没⽤return a.exec();}2.配置//QTTest.proQT += core guigreaterThan(QT_MAJOR_VERSION, 4) : QT += widgetsCONFIG += c++11DEFINES += QT_DEPRECATED_WARNINGSSOURCE += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.uiTRANSLATIONS += \QTTest_zh_CN.tsqnx : target.path = /tmp/&&{TARGET}/binelse : unix :! android : target.path = /opt/$${TARGET}/bin !isEmpth(target.path) : INSTALLS += target//mainwindow.ui<?xml version = "1.0" encoding = "UTF-8"?><ui version = "4.0"><class> MainWindow </class><widget class = "QMainWindow" name = "MainWindow"><property name = "geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name = "windowTitle"><string>Maindow</string></property><widget class = "QWidget" name = "centralwidget"/><widget class = "QMenuBar" name = "menubar"><property name = "geometry"><rect><x>0</x><y>0</y><width>800</width><height>26</height></rect></property></widget><widget class = "QStatusBar" name = "statusbar" /> </widget><resources/><connections/></ui>3.成员函数QWidget 类继承于 QObject 类和 QPaintDevice 类void QWidget::resize(int w, int h)void QWidget::resize(const QSize& )QSize QWidget::size() constvoid QWidget::show()QWidget::x()QWidget::y()QWidget::pos()QWidget::find()QWidget::font()QWidget::grab()QWidget::hide()QWidget::mask()QWidget::move()QWidget::rect()QWidget::close()QWidget::lower()QWidget::mapTo()QWidget::raise()QWidget::style()QWidget::winId()QWidget::cursor()QWidget::layout()QWidget::locale()QWidget::render()QWidget::scroll()QWidget::update()QWidget::window()QWidget::actions()QWidget::childAt()QWidget::isModal()QWidget::mapFrom() QWidget::palette() QWidget::repaint() QWidget::setFont() QWidget::setMask() QWidget::toolTip() QWidget::baseSize() QWidget::fontInfo() QWidget::geometry() QWidget::hasFocus() QWidget::isHidden() QWidget::isWindow() QWidget::setFocus() QWidget::setStyle() QWidget::sizeHint() QWidget::addAction() QWidget::clearMask() QWidget::framwSize() QWidget::grabMouse() QWidget::isEnabled() QWidget::isVisible() QWidget::setCursor() QWidget::setHidden() QWidget::setLayout() QWidget::setLocale() QWidget::statusTip() QWidget::whatsThis() QWidget::addActions() QWidget::adjustSize() QWidget::clearFocus() QWidget::focusProxy() QWidget::isTopLevel() QWidget::setEnabled() QWidget::setPalette() QWidget::setToolTip() QWidget::setVisible() QWidget::showNormal() QWidget::sizePolicy() QWidget::stackUnder() QWidget::styleSheet() QWidget::underMouse()⼆.QDialog1.窗体框架QDialog类继承与QWidget类注意:添加hellodialog.ui⽂件的时候,要把⾥⾯的 <class>HelloDialog</class> <widget class = "QDialog" name = "HelloDialog"> 改过来,不然会⽆法识别 ui 这个指针// hellodialog.h#ifndef HELLODIALOG_H#define HELLODIALOG_H#include <QDialog>namespace Ui{class HelloDialog;}class HelloDialog : public QDialog{Q_OBJECTpublic:explicit HelloDialog(QWidget* parent = nullptr);~HelloDialog();private:Ui::HelloDialog* ui;};#endif// HELLODIALOG_H// hellodialog.cpp#include "hellodialog.h"#include "ui_hellodialog.h"HelloDialog::HelloDialog(QWidget* parent) :QDialog(parent),ui(new Ui::HelloDialog){ui->setupUi(this);}HelloDialog::~HelloDialog(){delete ui;}// main.cpp#include "hellodialog.h"#include <QApplication>int main(int argc, char* argv[]){QApplication a(argc, argv);HelloDialog w;w.show();return a.exec();}2.附加窗⼝//模态对话框QDialog* dialog = new QDialog(this);dialog->setModal(true);dialog->show();QDialog dialog;dialog.setModal(true);dialog.show()//⾮模态对话框QDialog* dialog = new QDialog(this);dialog->show();QDialog dialog;dialog.show()3.对话框状态QDialog dialog;if (dialog.exec() == QDialog::Accepted)QDialog类是所有对话框窗⼝类,对话框窗⼝是⼀个经常⽤来完成短⼩任务或者和⽤户进⾏简单交互的顶层窗⼝对话框分为模态对话框和⾮模态对话框模态对话框在关闭它之前,不能与同⼀个应⽤程序的其他窗⼝进⾏交互⾮模态对话框既可以和它交互,也可以和同⼀个应⽤程序的其他窗⼝交互模态对话框⽤ exec() 函数显⽰,或者在 show() 函数之前加上 setModal(true)⾮模态对话框⽤ show() 函数显⽰// dialog.h#ifndef DIALOG_H#define DIALOG_H#include <QDialog>namespace Ui {class Dialog;}class Dialog : public QDialog{Q_OBJECTpublic:explicit Dialog(QWidget *parent = nullptr);~Dialog();private:Ui::Dialog *ui;};#endif// DIALOG_H// dialog.cpp#include "dialog.h"#include "ui_dialog.h"Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog){ui->setupUi(this);}Dialog::~Dialog(){delete ui;}// main.cpp#include "dialog.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);Dialog w;// w.setModal(true);// w.exec();w.show();return a.exec();}三.QMainWindowMainWindow类提供⼀个有菜单条⼯具栏状态条的主应⽤程序窗⼝它是最常见的GUI主窗⼝形式,它由外到内依次是菜单栏状态栏⼯具栏停靠窗⼝中⼼窗⼝//One.pro#-------------------------------------------------## Project created by QtCreator 2019-06-18T13:29:09##-------------------------------------------------# 表⽰项⽬加⼊core gui模块,⽤于GUI设计的类库模块QT += core gui# 条件执⾏语句,当QT主版本⼤于4才加⼊widgets模块greaterThan(QT_MAJOR_VERSION, 4): QT += widgets# ⽣成的⽬标可执⾏⽂件名称TARGET = One# 项⽬使⽤的模板是app,⼀般应⽤程序TEMPLATE = appDEFINES += QT_DEPRECATED_WARNINGSCONFIG += c++11#QT会⾃动修改以下新增/删除⽂件SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.qnx: target.path = /tmp/$${TARGET}/binelse: unix:!android: target.path = /opt/$${TARGET}/bin!isEmpty(target.path): INSTALLS += target//mainwindow.hQWidget是所有⽤户界⾯对象的基类,QMainWindow和QDialog都是QWidget的⼦类QMainWindow类提供⼀个菜单条/⼯具条/状态条的主应⽤程序窗⼝#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;};#endif// MAINWINDOW_H//mainwindow.cpp#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);}MainWindow::~MainWindow(){delete ui;}//main.cpp#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();return a.exec();}//hellodialog.ui可视化设计的窗体的定义⽂件,是⼀个XML⽂件MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent){//重置窗⼝⼤⼩resize(600, 400);//菜单栏创建QMenuBar* bar = menuBar();//将菜单栏放⼊窗⼝中setMenuBar(bar);//创建菜单QMenu* fileMenu = bar->addMenu("⽂件");QMenu* editMenu = bar->addMenu("编辑");//创建菜单项QAction* newAction = fileMenu->addAction("新建");//添加分隔符fileMenu->addSeparator();//QAction* openAction = fileMenu->addAction("打开");//⼯具栏可以有多个QToolBar* toolBar = new QToolBar(this);addToolBar(Qt::LeftToolBarArea, toolBar);//后期设置只允许左右停靠toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); //设置浮动toolBar->setFloatable(false);//设置移动toolBar->setMovable(false);//⼯具栏可以设置内容toolBar->addAction(newAction);//添加分割线toolBar->addSeparator();toolBar->addAction(openAction);//⼯具栏中添加控件QPushButton* btn = new QPushButton("a", this);toolBar->addWidget(btn);}。
第5讲 Qt窗口部件
都有边框和标题栏,但不是必需的:
QWidget的构造函数有两个参数:QWidget * parent = 0和 Qt::WindowFlags f = 0;
前面的parent就是指父窗口部件,默认值为0,表明没有父窗口; 而后面的f参数是Qt::WindowFlags类型的,它是一个枚举类型,分为 窗口类型(WindowType)和窗口标志(WindowFlags。前者可以定义 窗口的类型,比如我们这里f=0,表明使用了Qt::Widget一项,这是 QWidget的默认类型,这种类型的部件如果有父窗口,那么它就是子 部件,否则就是独立的窗口。
⑤单步跳出按钮。当进入函数内部时,跳出该函数,一般与 单步进入配合使用。
12
程序调试
从变量监视器中可以看到x、y、geometry和frame四个变量初始值都 是一个随机未知数。等到调试完成后,x、y的值均为0,这是它们的 默认值。而geometry的值为640x480+0+0,frame的值为639x479+0+0。 现在对这些值还不是很清楚,不过,为什么x、y的值会是0呢?我们 可能会想到,应该是窗口没有显示的原因,那么就更改代码,让窗口 先显示出来,再看这些值。在QWidget widget;一行代码后添加一行 代码: widget.show(); 注意:widget.show();不能加在widget.frameGeometry()之后,否则 值还是不变。
19
关联方式一:在设计模式关联
首先添加自定义对话框类MyDialog。在设计模式中向窗口上添加两个Push Button,并且分别更改其显示文本为“进入主界面”和“退出程序”。 点击设计器上方的“编辑信号/槽”图标,或者按下快捷键F4,这时便进入 了部件的信号和槽的编辑模式。在“退出程序”按钮上按住鼠标左键,然后 拖动到窗口界面上,这时松开鼠标左键。在弹出的配置连接对话框中,选中 下面的“显示从QWidget继承的信号和槽”选项,然后在左边的QPushButton 栏中选择信号clicked(),在右边的QDialog栏中选择对应的槽close(),完 成后按下“确定”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QTextFrame QTextBlock QTextTable
QTextList
文本块
•
一个文本块可以看作一个段落,回车换行可以看作一个新的文 本块。
遍历文本方法
QTextDocument *document = ui->textEdit->document(); // 获取文档的第一个文本块 QTextBlock block = document->firstBlock(); for(int i=0; i<document->blockCount(); i++){ qDebug() << tr("文本块%1, 文本块首行行号为:%2, 长度为:%3,内容为:").arg(i).arg( block.firstLineNumber()). arg(block.length()) << block.text();
QMenu : 菜单窗体组件
QAction : 抽象用户界面操作
// 在工具栏中添加动作 ui->mainToolBar->addAction(action_Open);
工具栏
•
QToolBar:包含了一组控件的可移动面板
QToolBar: 菜单栏管理类
// 在工具栏中添加动作 ui->mainToolBar->addAction(action_Open); // 向工具栏添加QToolButton按钮 ui->mainToolBar->addWidget(toolBtn); // 创建QSpinBox QSpinBox *spinBox = new QSpinBox(this); // 向工具栏添加QSpinBox部件 ui->mainToolBar->addWidget(spinBox);
菜单栏
•
通过代码编辑菜单
QMenuBar: 菜单栏管理类
// 添加编辑菜单 QMenu *editMenu = ui->menuBar->addMenu(tr("编辑(&E)")); // 添加打开菜单 QAction *action_Open = editMenu->addAction( QIcon(":/myImage/images/open.png"),tr("打开文件(&O)")); // 设置快捷键 action_Open->setShortcut(QKeySequence("Ctrl+O"));
addWidget: 插入一个窗体
addAction: 选项添加到工具栏
中心部件
• •
在窗口的中心区约放置一个中心部件 对于文档程序来讲一般是一个QTextEdit。
addSubWindow: 创建子窗口
// 新建文本编辑器部件 QTextEdit *edit = new QTextEdit(this); // 使用QMdiArea类的addSubWindow()函数 //创建子窗口,以文本编辑器为中心部件 QMdiSubWindow *child = ui->mdiArea->addSubWindow(edit); child->setWindowTitle(tr("多文档编辑器子窗口")); // 显示子窗口 child->show();
•
语法高亮:输入关键字时会显示不同的颜色。
class MySyntaxHighlighter : public QSyntaxHighlighter void MySyntaxHighlighter::highlightBlock(const QString &text) { QTextCharFormat myFormat; //字符格式 myFormat.setFontWeight(QFont::Bold); myFormat.setForeground(Qt::green); QRegExp expression("\\bchar\\b"); //要匹配字符串的长度 int length = expression.matchedLength(); //对要匹配的字符串设置格式 setFormat(index, length, myFormat }
show: 显示子窗口
Dock部件
QDockWidget
可以停靠在中心部件的旁边
可以悬浮在主窗口上面
就像一个工具箱,放置其他部件
状态栏
•
状态信息分为三类:临时信息,一般信息,永久信息。 临时信息: showMessage 一般信息: addWidget 永久信息: addPermanentWidget
谢谢!
Copyright © 2008 版权所有 东软集团
QPlainTextEdit
QTextEdit
QMidArea
QTextBrowser
主程序窗口框架
菜单栏
工具栏
中心部件
Dock部件
状态栏
一个widget就是一个窗口, Qt提供一个QMainWindow类 管理主窗口程序
菜单栏
•
Desinger中编辑菜单
在Desinger中向 Action编辑器中 拖入菜单
Linux图形编程—QT
3 Sept. 2008 © Neusoft Confidential
QT 编程—第五章 应用程序主窗口
目标: 本章旨在向学员介绍各种应用程序 主窗口的相关内容: 掌握应用程序主窗口各部分使 用方法。 掌握富文本处理,拖放等相关 技术。
学时:3 学时 教学方法:讲授ppt+上机操 作+实例演示
富文本处理
• •
富文本—文档中可以使用颜色,字体,表格等多种格式。 QTextEdit是一个高级的所见即所得的支持使用HTML风格标记 的多信息文本格式的查看器/编辑器。
QTextEdit QTextCursor QTextDocument
QTextFrameFormat QTextBlockFormat QTextTableFormat QTextListFormat
HTML
•
QTextEdit:支持使用HTML标签和CSS属性
// 在编辑器中添加文本并且使用html标签 ui->textEdit->append( tr("<h1><font color=red>使用HTML</font></h1>"));
拖放打开文件
事件:
拖动进入事件(drag) void MainWindow::dragEnterEvent 放下事件 (drop) void MainWindow::dropEvent
事件函数
接收动作:acceptProposedAction 忽略该事件:ignore
自定义拖放
事件:
鼠标按下事件 MainWindow::mousePressEvent 拖动进入事件 void MainWindow::dragEnterEvent 拖动事件 void MainWindow::dragMoveEvent 放下事件 void MainWindow::dropEvent
• • •
自定义菜单
•
菜单中是否可以添加各种部件?--使用自定义菜单
创建继承QWidgetAction的类 class MyAction : public QWidgetAction
实现createWidget虚函数,添加部件 QWidget* createWidget(QWidget *parent)
打印PDF
QPrinter printer; // 指定输出格式为pdf printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName(fileName);
ui->textEdit->print(&printer);
打印文档
打印机对象 QPrinter 打印对话框 QPrintDialog 选中区域 QPrintDialog::addEnabledOption 按下了打印按钮 QPrintDialog ::Accepte
打印预览
创建打印预览对话框 QPrintPreviewDialog 需要关联相关的信号槽 connect( &preview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(printPreview(QPrinter*)) );
// 显示临时消息,显示2000毫秒即2秒钟 ui->statusBar-> showMessage(tr("欢迎"),2000); // 创建标签 QLabel *permanent = new QLabel(this); // 标签样式 permanent->setFrameStyle( QFrame::Box | QFrame::Sunken); // 显示信息 permanent->setText(“welcom"); // 将标签设置为永久部件 ui->statusBar-> addPermanentWidget(permanent);
// 获取下一个文本块 block = block.next();
表格 列表 图片
•
编辑器中可以插入表格列表图片。
插入列表 insertTable 插入表格 insertList 插入图片 insertImage
查找功能
• •
bool QTextEdit::find ( const QString & exp, QTextDocument::FindFlagsoptions = 0 )