导图社区 Qt入门介绍
这是一篇关于Qt入门介绍的思维导图,主要内容包括:QML,事件机制,布局管理,信号与槽,Qt常用控件,Qt简介。Qt是一个面向对象的框架,它提供了丰富的库和工具,用于开发图形用户界面(GUI)应用程序,并支持多种操作系统,如Windows、Linux、macOS等。Qt不仅限于GUI开发,还支持数据库访问、网络编程、多媒体处理、并发编程等多种功能。
编辑于2024-06-27 11:02:33Qt入门介绍
Qt简介
Qt简介
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程序

Qt常用控件
标签( QLabel)
类名: QLabel
QLabel是我们最常用的控件之ー,其功能很强大,我们可以用来显示文本,图片和动画等
通过 QLabel类的 setText函数设置显示的内容
void settext(const Qstring &)
可以显示普通文本字符串
QLabel *label = new Qlabel(this),
label->setText("Hello, World!)
按钮( QPushButton)
类名: QPushButton
QPushbutton按钮也是Q常用控件之一,可以被点击,可以显示图标文字。
跟 QLabele类一样,也可以通过 settext函数设置按钮上的文字。
定义一个按钮对象
QPushbutton "pushbt= new QPushbutton (this)
设置按钮相对于主窗口位置
pushbt>setGeometry(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编辑时显示字符否则显示字符作为密码。
信号与槽
Qt的信号与槽机制
在程序开发中,经常使用回调机制来实现窗口部件的响应操作--所谓回调,就是事先将一个回调函数指针传给某一个处理过程,当这个处理过程得到执行时,回调预先定义好的回调函数以期实现激活其他处理的目的。
不同于回调函数机制,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++代码,元对象包含全部信号和槽的名字及指向这些函数的指针。
moc读C++源文件,如果发现有 Q _OBJECT宏声明的类,他就会生成另外一个C++源文件,这个新生成的文件中包含有该类的元对象代码。
布局管理
布局管理系统
简述
Qt的布局系统提供了一个简单的和强有力的方式,来自动排列窗口子控件布局。
所有 QWidget子类可以使用布局来管理他们的子控件Qwidget: setlayout()函数可以为一个控件布局。
当通过这种方式布局以后,它负责以下任务
定位子部件
感知窗口默认大小
感知窗口最小大小;
改变大小处理
当内容改变时自动更新:
字体大小,文本或子部件的其他内容随之改变;
隐藏或显示子部件;
移除一个子部件
Qt布局类
Layout类是布局管理器的基类,它是一个抽象基类。该类继承自Q0 b ject和 QLayoutitem类,而 Layoutitem类提供了一个供 Layout操作的抽象项目
QLayout子类
Qboxlayout(基本布局管理器)
Qhboxlayout(水平布局管理器)
Qvboxlayout(垂直布局管理器)
Qgridlayout(网格布局管理器)
事件机制
事件概述
事件机制
定义:事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。
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类:实现一个定时器,可以使用信号和槽实现定时操作,还可以设置只运行一次的定时器
QML
QML介绍
QML是什么
QML,全称为 Qt Meta-Object Language,是一种声明式语言,用于在 Qt 框架中创建用户界面(UI)。它采用了 JavaScript 的语法,并通过 Qt 的 QML 引擎来解释和执行 QML 代码。通过 QML,开发者可以快速、简单地创建现代化的用户界面,而无需太多的代码。
QML语法
导入语句:用于导入 Qt 模块和自定义 QML 组件。 全局对象定义:用于定义全局的 QML 对象,例如常量、枚举、函数等。 根元素:所有其他元素都是根元素的子元素。
示例
import QtQuick 2.0 Rectangle { width: 100 height: 100 color: "red" }
QML基础元素
QML Rectangle
基本属性
width: 矩形的宽度
height:矩形的高度
visible:矩形的可见性
颜色属性
color:填充的颜色(纯色)
gradient:填充的颜色(渐变色)
边框属性
border.width:边框宽度
border.color:边框的颜色
圆角属性
radius:圆角的半径
其他属性
antialiasing:是否开启反锯齿
smooth:是否开启平滑
transform:变换的效果
QML Text
1.基本属性
text:文本
color:文本色
2.文本字体
font属性组:
family:字体
pointSize:字体大小
bold:粗体
italic:斜体
underline:下划线
capitalization:大小写
3.文本格式
textFormat:Text.PlainText(纯文本)、Text.RichText(富文本)
Text.AutoT ext(根据算法Qt:mightBeRichT ext()自动计算)
4.长文本
cip:截断(可能造成某个字母显示不全)
elide:文本省略(超出部分显示为省略号“”)
wrapMode:让文本按照单词边界换行
5.文本样式
styleColor:用于勾勒文本的轮廓色,作为凸起/凹陷文本的阴影色
style:凸起/凹陷效果,Text.Normal(默认)、Text.Outline、Text.Raised和Text.Sunken
6.超链接
linkColor:超链接颜色
默认情况下,超链接在点击时没有任何反应,需监听linkActivated(string link)信号,并通过 Qt.openUrlExternally((link)才能打开链接。
7.文本背景
使用Label元素,通过background属性指定(例如:Rectangle),
QML Image
1.核心属性
source:用于指定显示的图像路径,可以是本地文件路径或远程Ul地址:
2.控制显示图像的大小
width:宽度
height:高度
如果仅设置width或height其中一个,则另一个将根据图像的宽高比自动调整。
3.控制加载图像的尺寸
sourceSize:用于指定实际加载的图像的尺寸,它改变的是加载的图像的大小。
当图像的分辨率较大时,使用该属性可以缩小图像的大小,以减少内存占用和加载时间,但可能会影响图像质量。
4.图像反转
mirror:水平反转
mirrorVertically:垂直反转
5.填充模式
Image..Stretch(默认值):缩放图像以填充可视区域,无需保持宽高比。
Image.PreserveAspectFit:保持宽高比,并缩放图像以适合可视区域。
Image.PreserveAspectCrop:保持图像宽高比,并缩放图像以填充可视区域(必要时进行裁剪)。
Image.Tile:将原始图像平铺在可视区域中(即:当图像大小小于可视区域时,图像会水平和垂直复制)
Image.TileVertically:水平居中重复显示元素,直到填充整个可视区域(与“Tile”不同,此选项会垂直平铺,但在水平方向上只显示一次)
Image,.TileHorizontally:垂直居中重复显示元素,直到填充整个可视区域(与“Tile”不同,此选项会水平平铺,但在垂直方向上只显示一次)。
Image.Pad:图像未转换。
6.加载网络图片
source:指定远程Url地址
asynchronous:用于指定图像加载时是否启用异步模式。若为true,则异步加载,这意味着在后台进行且不会阻塞主线程从而提高程序的性能和响应能力;若为flse,则同步加载,直到图像加载完成,这可能导致程序无响应。
status:表示当前图像的加载状态(例如:在加载图像出错时状态为Image.Error))。
QML布局
1.手动定位
X Y为常量
适用于静态界面
2.锚定位
3.定位器
4.布局管理器
ColumnLayout、.GridLayout、RowLayout、StackLavout等
比起定位器,可对布局进一步细化或限制,非常适 合调整用户界面的大小
QML与C++交互
1.实现C++类
从QObject类继承
使用 Q_INVOKABLE 修饰函数
使用Q_PROPERTY宏
2.注册实现的C++类型
qmlRegisterUncreatableType 注册为非实例化类型
qmlRegisterType 注册为实例化类型
qmlRegisterSingletonType 注册为单例类型
3.在QML中导入注册的C++类型
4.在QML中实例化C++类型