导图社区 QT 1-6章节总结
这是一篇关于QT 1-6章节总结的思维导图。Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
编辑于2021-05-20 09:15:53章节总结
Qt简介
Qt简介
Qt是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。
Qt是一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。
Qt优点
可移植性:QT不仅适用于UNX,同样适用于 Windows。为了同时拥有世界上几百万UNX用户以及几百万的 Windows用户,最好的办法是采用一个既适用于UNX,又适用于 Windows的GU工具包,其答案是QT
易用性:QT是一个C++工具包,它由几百个C+类构成,你在程序中可以使用这些类。因为C++是面向对象的编程语言,而QT是基于C++构造,所以QT具有OOP的所有优点。
运行速度:QT非常容易使用,且也具有很快的速度。
QT的易用性和快速是密不可分的。这一优点要归功于QT开发者的辛苦工作,他们花费了大量的时间来优化他们的产品。QT比其他许多GUI工具包运行速度快的原因是其实现方式。
QT是一个GU仿真工具包,即它不使用本地工具包作调用,而是使用各自平台上的低级绘图函数,从而提高程序速度。
Qt/E简介
Qt/Embedded(简称QE)是一个专门为嵌入式系统设计图形用户界面的工具包
QE就是Qt的嵌入式版本。
用QE开发的应用程序要移植到不同平台时,只需要重新编译代码,而不需要对代码进行修改。
嵌入式系统地要求是小而快速,而QtE就能帮助开发者为满足这些要求开发强壮地应用程序。
个简单的Qt程序

Q常用控件
标签( Qlabel)
类名: Qlabel
Qlabel是我们最常用的控件之ー,其功能很强大,我们可以用来显示文本,图片和动画等
通过 Qlabel类的 set Texte函数设置显示的内容
void settext(const Astring &)
可以显示普通文本字符串
Qlable"label = new Qlable(this),
label->set Text("Hello, Worldn)
按钮( Qpush Button)
类名: Qpush Button
Qpushbutton按钮也是Q常用控件之一,可以被点击,可以显示图标文字。
跟 Qlabele类一样,也可以通过 gettext函数设置按钮上的文字。
定义一个按钮对象
Qpushbutton "pushbt= new Qpushbutton (this)
设置按钮相对于主窗口位置
pushbt>set Geometry(100, 80, 60, 40)
其中100,80分别为按钮控件相对于主窗口左边及顶端的距离,6040分别为按钮的长和宽。
文本框( Qlineedit)
类名: Qlineedit
Qt提供的单行文本编辑框 Qlineedit
获取编辑框内容使用text(),函数声明如下
Astring text( const
设置编辑框內容
void settext(const Astring &)
设置显示模式
使用 Qlineedit类的 setechomode()函数设置文本的显示模式,函数声明:void setechomode(Echomode mode
Echomodet是一个枚举类型,一共定义了四种显示模式
Qlineedit:: Normal模式显示方式,按照输入的内容显示。
Qlineedit:: Noecho不显示任何内容,此模式下无法看到用户的输
Qlineedit:: Password密码模式,输入的字符会根据平台转换为特殊字符。
Qlineedit: Passwordechoonedit编辑时显示字符否则显示字符作为密码。
信号与槽
Q的信号与槽机制
在程序开发中,经常使用回调机制来实现窗口部件的响应操作--所谓回调,就是事先将一个回调函数指针传给某一个处理过程,当这个处理过程得到执行时,回调预先定义好的回调函数以期实现激活其他处理的目的。
不同于回调函数机制,QT提供了信号和槽机制。信号是一个特定的标识:一个槽就是一个函数,与一般的函数不同,槽函数既能够和信号关联,又可以象普通函数一样直接调用。
当某个事件出现时,通过发送信号,可以将与之相关的槽函数激活,即执行槽函数代码。
槽(slot)
槽是普通的C++成员函数,能被正常调用,他们唯一的特别性就是非常多信号能和其相关联。当和其关联的信号被发射时,这个槽就会被调用。槽能有参数,但槽的参数不能有缺省值。
槽实际上是标准函数,因此,可以象调用其它函数一样调用它们
槽的声明也是在头文件中进行的。例如,下面声明了三个槽
public slots
void nyslott
void myslot(int x),
void mysignalparam(int X, int y)
信号( signal)
当对象内部发生某些事件时,它可以发出信号。如果这个信号连接到槽那么那个槽(函数)就被执行。可以将多个槽连接到同一个信号,那么这些槽就将一个接一个地被执行,其执行顺序是任意的
信号是一种特殊类型的函数。它们被定义为当某个事件发生时就被发射发送信号的方法是是: emit signals.
信号的声明是在头文件中进行的,QT的 signals关键字指出进入了信号声明区,随后即可声明自己的信号。例如,下面定义了三个信号:
signals
void mysignalo
void mysignal(int x)
void mysignalparam(int X,Int y)
信号和槽的关联
通过调用 Qobject对象的 connecte函数来将某个对象的信号和另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下
bool Qobject:: connect(const Qobject*sender, const char*signal,const Qobject*receiver, const char*member)
元对象工具
元对象编译器moc( meta object compiler)对C++文件中的类声明进行分析并产生用于初始化元对象的C++代码,元对象包含全部信号和槽的名字及指向这些函数的指针。
omc读C++源文件,如果发现有 Q _OBJECT宏声明的类,他就会生成另外一个C++源文件,这个新生成的文件中包含有该类的元对象代码。
布局管理
布局管理系统
简述
Qt的布局系统提供了一个简单的和强有力的方式,来自动排列窗口子控件布局。
所有 Qwidget子类可以使用布局来管理他们的子控件Qwidget: setlayout()函数可以为一个控件布局。
当通过这种方式布局以后,它负责以下任务
定位子部件
感知窗口默认大小
感知窗口最小大小;
改变大小处理
当内容改变时自动更新:
字体大小,文本或子部件的其他内容随之改变;
隐藏或显示子部件;
移除一个子部件
Qt布局类
Layout类是布局管理器的基类,它是一个抽象基类。该类继承自Q0 b ject和 Qlayoutitem类,而 Layoutitem类提供了一个供 Layout操作的抽象项目
QLayout子类
Qboxlayout(基本布局管理器)
Qhboxlayout(水平布局管理器)
Qvboxlayout(垂直布局管理器)
Qgridlayout(网格布局管理器)
Qformlayout(窗体布局管理器)
Qstackedlayout(栈布局管理器)
主窗口
主窗口框架
主窗口
主窗口为建立应用程序用户界面提供了一个框架,Qt提供了Qmainwindow和与其相关的一些类来进行主窗口的管理
Qmainwindow 2类提供了一个应用程序主窗口,包括一个菜单栏( menu bar)、多个工具栏( tool bars)、多个锚接部件(dockwidgets)、一个状态栏( status bar)以及一个中心部件( centralwidget)
主窗口具有自己的布局管理器,因此有 Qmainwindow窗口上设置布局管理器或者创建一个父窗口部件为 Mainwindowl的布局管理器都是不允许的。
创建主窗口方法
全部代码生成,单继承自 Amain Window类,在子类的实现文件中使用代码创建应用程序主窗口的菜单、工具栏、锚接部件以及状态栏等并设置它们的属性
使用Q设计师绘制应用程序主窗口,然后添加菜单、工具栏等,并进行属性设置、关联信号与槽;与代码相结合
菜单栏
Qmenubara类提供了一个水平的菜单栏,在 Amain Window中可以直接获取它的默认存在的菜单栏,向其中添加 menu类型的菜单对象,然后向弹出菜单中添加 Action类型的动作对象。
区分:菜单是 Menu对象,多个 menu对象放置在一个Qmenubar((菜单栏)对象中。对于每个菜单,我们再为其添置动作列表,即 Action对象。
QMenu类
一个菜单包含一组动作,动作可由函数 addiction()来添加
总共有三种类型的动作项:分隔线,显示下级菜单的动作,以及执行某个命令的动作项。
当添加一个动作项后,通常需要指定一个接收者和一个槽函数。每当动作项发出信号 triggered(),接收者可以收到通知。
如果要清空一个菜单,可以使用函数 clear(),如果要清除单个的动作项,则使用函数 removeAction()
Qaction类
Qaction类提供了一个可以同时出现在菜单和工具条上的抽象用户界面操作。如果添加到菜单中就会显示成菜单项;如果添加到工具条,就会显示成一个按钮。
Qaction类保存有关这个动作的信息,例如文本描述、图标、快捷键、回调函数等。
一个 Qactioni动作包含了ー个图标,一个菜单显示文本,一个快捷键个状态栏显示文本,一个“" What's This?”显示文本和一个工具提示文本。这些都可以在构建 Raction类对象时在构造函数中指定。
工具栏
工具栏 Qtoolbar?类提供了一个包含了一组控件的可以移动的面板,它用于提供常用命令或者选项的快速访问
可以使用绝大多数窗口部件,最常用 Qtoolbutton和Qcombobox.
使用 addiction()添加部件。
属性
toolbuttonstyle:设置图标和相应文本的显示及其相对位置等
Movabel:设置状态栏是否可以移动
allowedarea:设置允许停靠的位置
Iconize:属性设置图标的大小
Floatable:属性设置是否可以悬浮
中心部件
在主窗口的中心区域可以放置一个中心部件,它一般是一个编辑器或者浏览器。这里支持单文档部件,也支持多文档部件
采用 Qt Designer创建主窗口时,默认情况下,系统已经创建了一个中心窗口部件,它是子类化 Widget的
代码设置中心窗口部件可以调用主窗口类 setcentralwidget)方法,每次程序调用 setcentralwidget()方法时,先前存在的中心窗口部件将被新的所替换,而且主窗口会销毁原来的部件,无需用户处理。
从理论上来讲,任何继承自 Widget的类的派生类的实例,都可以作为中心窗口部件使用。
状态栏
QStatusbar类提供了一个水平条,用来显示状态信息。
Qmainwindow中默认提供了一个状态栏。在状态栏的最右端,还有一个 Qsizegrip部件,用来调整窗口的大小,可以使用setsizegripenabled()函数来禁用它。
状态信息可以被分为三类
临时信息,如一般的提示信息;使用 showmessage()函数来显示一个临时消息,它会出现在状态栏的最左边
正常信息,如显示页数和行号;一般用 addwidget)函数添加一个 Qlabel到状态栏上用于显示正常信息,它会生成到状态栏的最左边,可能会被临时消息所掩盖。
永久信息,如显示版本号或者日期。如果要显示永久信息,要使用 addpermanentwidget(函数来添加一个如 Alabel-一样的可以显示信息的部件,它会生成在状态栏的最右端,不会被临时消息所掩盖。
资源文件
Qt资源机制是一个独立于平台的(跟使用的操作系统无关)用于在可执行文件中存储二进制文件的机制,是Qt核心机制之一。
可以让需要的文件(图片、文本等)包含到程序编程生成的可执行文件(例如exe文件)中。
保证了程序中使用的文件不会丢失、不会因为存放路径而导致程序运行错误。
使用资源集( Resource Collection Files)文件,即。qrc文件。 quake能够识别这个资源集文件,并且能够根据它的描述去相应的目录下定位具体的资源。
富文本文档管理器
富文本与纯文本
富文本( Rich Text)或者叫做富文本格式,简单来说就是在文档中可以使用多种格式,比如字体颜色、图片和表格等等。
例如 Windows上的记事本就是纯文本编辑器,而Word就是富文本编辑器。
富文本接口
Qt富文本的处理及接口
编辑操作:基于光标的一些接口函数,模拟了用户的编辑操作,基于Qtextcursor类。
只读操作:文档结构框架预览,使用了只读的分层次的接口函数,它们有利于文档的检索和输出。基于 Qtextdocument类。
构建 Qtextedita类的对象时,就已经构建了一个 Qtextdocument类对象和一个Qtext Cursor类对象,只需调用它们进行相应的操作即可。
Qtextdocument类是文本文档的代表,它包含了构建富文本文档所需的信息。
富文本结构元素
一个富文本文档的结构元素:
框架( Qtextframe)
文本块( Qtextblock)
表格( Qtexttable)
列表( Qtextlist)
每种元素的格式又使用相应的 formata类来表示:
框架格式( Qtextframeformat)
文本块格式( Qtextblockformat)
表格格式( Qtexttable Format)
列表格式( Qtextlistformat)
富文本使用
Docmenty组成
一个空的文档包含了一个根框架( Root frame),这个根框架又包含了一个空的文本块( Block).
frame将一个文档分为多个部分,在根框架里可以再添加文本块、子框架和表格等。
文本块
文本块 Qtext Block类为文本文档 Qtextdocument提供了一个文本片段( Qtextfragment)的容器。
一个文本块可以看做是一个段落,但是它不能使用回车换行,因为一个回车换行就表示创建一个新的文本块。 Qtextblock提供了只读接口,它是前面提到的文档分层次的接口的一部分,如果 Qtextframe看做是一层,那么其中的 Qtextblock就是另一层。
文本块的格式由 Qtextblockformat2类来处理,它主要涉及对齐方式文本块四周的边白,缩进等内容。而文本块中的文本内容的格式,比如字体大小、加粗、下划线等内容,则由 Qtextcharformat类来设置。
富文本处理
遍历;
插入表格、列表和图片
语法高亮;
设置字体格式
查找;
事件机制
事件概述
事件机制
定义:事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。
Qt中事件被封装成一个个对象,所有的事件均继承自抽象类 Qevent.
Qt程序是事件驱动的,程序的每个动作都是由幕后某个事件所触发。
Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期。
当调用 Application: exec O时,就进入了事件循环。
事件分类
键盘事件∷按键按下和松开。
鼠标事件:鼠标移动,鼠标按键的按下和松开。
拖放事件:用鼠标进行拖放。
滚轮事件:鼠标滚轮滚动
绘屏事件:重绘屏幕的某些部分
定时事件:定时器到时
焦点事件:键盘焦点移动
进入和离开事件:鼠标移入 widget之内,或是移出
移动事件: widget的位置改变
大小改变事件: widget的大小改变
显示和隐疲事件: widget显示和隐藏
窗口事件:窗口是否为当前窗口
事件与信号
信号:是Qt的机制之一,针对应用程序来说;
事件:操作系统或软件处理;
事件触发信号,事件可以过滤,事件更底层,事件是基础,信号是扩展。
信号通常用来“使用” widget,而事件用来“实现" widget。
事件处理
重新实现 event()或部件处理函数。
安装事件过滤器
重新实现 notify()函数。
事件过滤器:t中一个独特的事件处理机制,可以让一个对象侦听拦截另外一个对象的事件;
(1)调用 nstalleventfilter()注册需要管理的对象
(2)在 eventfilter的里处理需要管理的对象的事件
事件传递
对于某些类别的事件,如果在整个事件的派发过程结朿后还没有被处理,那么这个事件将会向上转发给它的父 widget,直到最顶层窗口
如何判断一个事件是否被处理了呢?
Qobject: event)通过返回bo이值来表示是否已处理,真"”表示已经处理,“假”表示事件需要继续传递。
调用 Qevent: Ignore()或 Qevent: accept)对事件进行标识
鼠标事件
鼠标事件:
Qmouseevent类用来表示一个鼠标事件,当在窗口部件中按下鼠标或者移动鼠标指针时,都会产生鼠标事件。利用 Qmouseevent类可以获知鼠标是哪个键按下了,还有鼠标指针的当前位置等信息。通常是重定义部件的鼠标事件处理函数来进行一些自定义的操作
滚轮事件
Qwheelevent类用来表示鼠标滚轮事件,在这个类中主要是获取滚轮移动的方向和距离。
键盘事件
Qkeyevent类用来描述一个键盘事件。当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输入焦点的部件。
Qkeyevent的key()函数可以抉取具体的按键,需要特别说明的是,回车键在这里是Qt::Key _ Return
键盘上的一些修饰键,比如Ctr和Shif等,这里需要使用 Qkeyeventl的 modifiers()函数来获取它们。
定时器
Qtimereventa类:用来描述一个定时器事件。
starttimer( int interval):来开启一个定时器。
参数:设定定时时间ms
返回一个整型编号来代表这个定时器。
当定时器溢出时就可以在 timerevent)函数中获取该定时器的编号来进行相关操作。
Timer类:实现一个定时器,可以使用信号和槽实现定时操作,还可以设置只运行一次的定时器