《QT学习第二篇:QT的常用控件属性与按钮、view系列、Label、输入框》

**前引:**本文系统介绍了Qt框架中常用控件的属性设置与功能实现方法。主要内容包括:控件状态管理(Enabled/Disabled)、位置控制(geometry)、窗口属性设置(标题/透明度/光标)、文本样式(字体/提示/快捷键)、按钮系列(普通/单选/多选按钮)、标签文本处理(格式/填充/对齐)、计时器与进度条实现、输入类控件(单行/多行输入框、下拉框、各类微调器)等。通过具体代码示例展示了如何利用Qt提供的API进行控件属性设置和功能开发,包括信号槽机制、样式表设置等关键技术

目录

一、属性系列

(1)Enabled控件状态

(2)geometry控件位置

(3)windowTitle窗口标题

(4)windowOpacity窗口透明度

(5)cursor光标图案

(6)font字体设置

(7)toolTip控件提示说明

(8)focusPolicy焦点选中

(9)styleSheet通过QSS设置界面样式

(10)QShortcut快捷键绑定

一、按钮系列

(1)PushButton普通按钮

(1)设置图标

(2)设置快捷键

(2)ToolBUtton下拉按钮

(3)RadioButton选项按钮

(1)组内单选

(2)组内多选

(4)CheckBox选项按钮

(5)CommandLinkButton引导按钮

[(6)Dialog Button多选按钮](#(6)Dialog Button多选按钮)

三、Model+view系列

[(1)List view](#(1)List view)

[(2)Tree view](#(2)Tree view)

[(3)Table view](#(3)Table view)

[(4)Column view](#(4)Column view)

[(5)Undo view](#(5)Undo view)

四、Label系列

(1)文本格式

(2)文本填充

(3)文本对齐

(4)自动换行、缩进、边距

(5)伙伴关系

五、计时器与进度条与日历

(1)计时器

(2)进度条

(3)日历

六、输入类系列

(1)LineEdit单行输入框

(2)TextEdit多行输入框

(3)ComboBox下拉框

(4)SpinBox方型微调

(5)Date/TimeEdit时间框

(6)QDial圆框微调

(7)QSlider滑动微调

(8)QFontComboBox字体框

(9)QplainTextEdit纯文本编辑器

(10)QSliderBar滚动条

(11)KeySquenceEdit快捷键框

(12)QTextBrowser富文本编辑器

[(13)Horizontal/Vertical Line分割线](#(13)Horizontal/Vertical Line分割线)


一、属性系列

(1)Enabled控件状态

Enabled 控件有两个API:

isEnabled:查看控件的可用状态

setEnabled:设置控件的可用状态,true表示可用,false表示不可使用

例如:现在我们实现通过"切换状态"按钮来控制上面这个控件的可用状态显示

效果展示:

(2)geometry控件位置

首先需要明白控件左上端点的坐标是(x,y),同时控件有宽度和高度(width,height)

那么QRect类型返回值就是:(x , y , width , height),通过x(),y()......完成获取

这系列的接口有四个:

geometry:返回整个控件 QRect 类型的坐标

rect:获取客户端的 QRect 类型的坐标

setGeomtry:参数是 QRect 类型 或者 四个参数(x,y,width,height)

QRect类 可以通过 setx 和 sety 成员函数来设置 x , y下标

例如:实现一个可以上下左右移动的方框:

效果展示:

注意:

在图形化方框中其实还有一行,也就是左上角标签所在的这一行,Geometry 是访问的标签的下一行作为起点,如果是 frametGeometry,则是以标签左上角作为起点,例如:

需要注意的是:如果在构造函数里面去访问这个窗口,可能还没有构造出来,所以可以在控件访问

(3)windowTitle窗口标题

什么是窗口标题?即窗口左上角的那个图标,例如:

这系列的接口有两个:

windowTitle:获取当前窗口的标签

setwindowTitle:设置当前窗口的标签

我们重点看第二个接口,直接上手如何修改:

(1)额外创建一个 QT->QTResource File文件

(2)先 AddPrefix,前缀可以自己修改,这个是一个伪目录(非物理文件位置)

然后把图片放到这个项目的同级目录或者子目录中,路径和文件名不要使用中文!

选择 ADD files,将这个图片加载进来

先创建一个Qicon类,然后指定路径:这个路径是相对于虚拟目录的,以" "开头

效果展示:

(4)windowOpacity窗口透明度

设置窗口的一个透明度,两个接口:

windowOpacity:获取当前窗口的透明度,返回的类型是float类型

setWindowOpacity:设置当前窗口的透明度,参数是 float类型(范围是0.0~1.0)

例如:

(5)cursor光标图案

这个控件就是用来控制鼠标在窗口显示的一个图案,接口有三个:

cursor:获取当前的 cursor 属性,返回QCursor对象类型

setCursor:设置该Widget光标的形状,鼠标在该控件中时生效,参数是QCursor对象类型

QGuiApplication::setOverrideCursor:设置全局Widget属性,在当前窗口生效

例如通过 ui 直接操作:

例如通过代码操作:

或者自定义光标图案:先创建一个 qrc 文件,然后把图片导入进来,设置路径和文件名即可

(6)font字体设置

这系列的接口有两个:

font:获取当前字体信息,返回QFront对象类型

setFont:设置当前字体的属性,参数是 QFront 类型

关于 QFront:

例如可以直接在 ui 中操作字体属性:

例如通过代码设置字体属性:

(7)toolTip控件提示说明

这系列的接口有两个:

setToolTip:设置ToolTip,鼠标停留在这个控件上面会有提示说明

setToolTipDuration:设置"提示说明"显示的时间

例如:

(8)focusPolicy焦点选中

这系列接口有两个:

focusPolicy():获取focusPolicy,返回Qt::FocusPolicy

setFocusPolicy(const FocusPolicy):设置选中焦点

Qt::FocusPolicy是一个枚举类型:

枚举值 含义
Qt::NoFocus 控件不接受任何焦点,点击或按 Tab 都不会选中它。
Qt::TabFocus 只能通过键盘 Tab 键获得焦点。
Qt::ClickFocus 只能通过鼠标点击获得焦点。
Qt::StrongFocus 可以通过 Tab 键或鼠标点击获得焦点(QLineEdit 的默认值)。
Qt::WheelFocus 在 StrongFocus 的基础上,还可以通过鼠标滚轮获得焦点。

例如:可以直接通过 ui 修改

例如:可以通过代码修改焦点选中状态(直接通过set.....设置枚举值)

(9)styleSheet通过QSS设置界面样式

(1)通过 ui 或者 右键 直接设置

注意:通过 key---value 设置界面样式,如下展示:键和值之间用**:分隔。键值对之间用;**分隔

功能 示例代码 说明
文本颜色 color: green; 支持颜色名(red)、十六进制(#ff0000)、RGB(rgb(255,0,0))。
字体设置 font-family: "微软雅黑";``font-size: 30px;``font-style: italic; 字体名需用引号,大小需带单位(px/pt),样式支持 italic/bold
背景色 background-color: #f0f0f0; 控件的背景颜色。
边框样式 border: 1px solid black; 边框宽度、线型(solid/dashed)、颜色。
内边距 padding: 10px; 控件内容与边框的距离。

具体语法事例如图:

例如通过代码设置:(注意多个 setStyleSheet只有最后一个会生效,所以多个就一起合并)

(10)QShortcut快捷键绑定

(1)创建快捷键对象

cpp 复制代码
QShortcut *shortcutXXX = new QShortcut
(
    QKeySequence("快捷键标识"),  // 比如 "Ctrl+S"、Qt::Key_Plus
    this
);

(2)绑定信号和槽函数

cpp 复制代码
connect
(
    shortcutXXX,           
    &QShortcut::activated, 
    this
    &接收者类名::槽函数名       // 要执行的自定义槽函数(或者Lambda表达式)
);

一、按钮系列

(1)PushButton普通按钮
(1)设置图标

比如给PushButton设置图标:使用 setIcon 和 setIconSize

(2)设置快捷键

我们现在完成一个通过"上下左右"转化为控制"wasd"来控制狗头移动:

(1)现在我们先设置四个点击按钮的图标:

(2)现在我们来控制移动,也就是实现它们的四个槽函数

(3)现在我们设置快捷键

假设设置单个快捷键或者组合键:

(2)ToolBUtton下拉按钮

QToolBUtton和QPushButton的区别是:(1)QToolButton天生支持下拉框(QMenu)

(2)PushButton默认显示文字,ToolButton默认显示图标

(注意:一定要先设置弹出模式,在设置下拉框,选项选中信号:QMenu::triggered)

(3)RadioButton选项按钮
(1)组内单选

checkable:是否能选中

checked:是否已经被选中

QButtonGroup:创建一个组,通过addButton来进行分组

例如:设置按钮的可选状态

例如:对按钮进行分组

(2)组内多选

直接设置组的互斥:setExclusive

(4)CheckBox选项按钮

这个按钮天生支持多选,例如:

例如我们现在实现一个点菜的:

(5)CommandLinkButton引导按钮

作用:相较于QPushButton,具有引导性(如这个箭头引导用户进行选项)

天生支持两行文本,主文本(setText)和副文本(setDescription)

例如:

(6)Dialog Button多选按钮

作用:不用通过布局管理器去手动排版(选项信号:QDialogButtonBox::accepted / rejected)

例如:

三、Model+view系列

这里面的模型都是一样的(即存储的数据类型不同,只是视图不同

作用:实现模型和视图的分离,模型用来存储数据,视图用来渲染

(即给你视图,你需要去自定义模型,给模型添加数据(模型会自动显示数据))

(1)List view

布局:一维线性垂直布局

常用接口:

QStandardItemModel:模型类

setModel:设置模型

appendRow:给模型添加数据(QStandardItem(QString)类型)

QListView:视图类

例如:

(2)Tree view

布局:树状布局,类似文件系统,拿到根节点之后就开始套娃使用

invisibleRootItem:获取根节点

appendRow:给模型添加数据(QStandardItem(QString)类型)

QTreeView:视图类

setModel:设置模型

expandAll:设置为可展开

例如:

(3)Table view

布局:二维线性垂直布局

appendRow:给模型添加数据(QStandardItem(QString)类型)

QTableView:视图类

setModel:设置模型

setFixedSize:给视图调整大小

例如:

(4)Column view

作用:一个水平(从左向右)的层级视图------>就是一个水平的层级结构

invisibleRootItem:获取根节点

appendRow:给模型添加数据(QStandardItem(QString)类型)

QColumnView:视图类

setModel:设置模型

例如:

(5)Undo view

作用:自然支持数据修改回滚

例如:

四、Label系列

(1)文本格式

通过 setTextFormat 来设置文本的格式,文本类型选项都是Qt 里面的枚举,如下:

复制代码
PlainText:纯文本
复制代码
RichText:富文本

MarkdownText:markdown文本

例如:除了纯文本其他类型的文本格式是支持标签来修饰文本内容的

(2)文本填充

我们现在还是先导入图片,再调整标签大小,再设置为自动填充(静态):

设置图片也可以是:QPixmax 和 setPixmap

但是现在窗口如果手动调整大小的话,标签是固定的,所以需要设置标签随窗口动态变化

刚好有 Widget::resizeEvent 内置函数在每次修改窗口都会调用它,可以通过 event 获取窗口大小

(这里使用了 C++ 多态的知识,子类重写了父类的 resizeEvent 函数)

(3)文本对齐

通过接口 setAlignment 和枚举选项 Qt::Align系列 完成对齐:

(4)自动换行、缩进、边距

通过设置 setWordWrap setIndent setMargin 来完成:

(5)伙伴关系

伙伴关系:绑定 RadioButton 和 label,通过快捷键来完成选择对应的 RadioButton

标签 label 的内容必须存在:&+绑定的字符

再通过快捷键 Alt+字符。就可以通过键盘完成快捷选项

五、计时器与进度条与日历

(1)计时器

在 ui 中有这样一个控件:LCD Number,它就是一个计时器的样式,如下:

但是计时器如何工作?比如什么时间变化一次,每次变化多久?需手动new一个计时器:QTimer

QTimer 就是 Qt 里的定时闹钟,每次发送timeout信号:

  • 给它设置一个时间间隔(如 1000ms = 1 秒),它就会每隔这段时间就会发送信号
  • 但它自己不知道响了之后要做什么,只是单纯地按时发出信号,所以需要槽函数
(2)进度条

在 ui 中有这样一个控件 QProgressBar ,它是一个进度条样式,如图:

同样,进度条不知道什么时候变化,它只是一个样式,所以还是需要一个 QTimer 计时器:

(3)日历

在 ui 中有这样一个 QCalendarWidget 控件,也就是日历,如图:

现在我们做一个点击日历的某个位置,可以显示出来具体时间,通过信号:selectChanged

六、输入类系列

(1)LineEdit单行输入框

这个控件是:Line Edit(如果参数没有用可以通过 (void)参数 取消警告)

几个常用的成员函数:

text().trimmed().isEmpty():判断输入内容是否有效,true为无效(通过内容调用)

setPlaceholderText:设置输入框提示词

setClearButtonEnabled:一键清楚输入框内容按钮

setEchoMode:内容显示样式(选项是 QLineEdit 里面的宏,比如 Password 宏隐藏内容)setInputMask:设置输入格式,比如("000-0000-0000",那么用户输入内容必须是:123-****....)

例如:

(2)TextEdit多行输入框

在 ui 中有这样一个控件:TextEdit,属于多行输入框,如下样式:

几个常用的成员函数:

placeHolderText:输入框为空时提示的内容

toPlainText().trimmed().isEmpty():判断输入框有没有有效内容(true代表无内容)

readOnly:是否是只读的

autoFormating:开始自动格式化(参数:QTextEdit::AutoAll(自动格式化)枚举)

setGeometry:设置大小

常用信号:

selectionChanged:选中范围时触发

textChanged:文本改变时触发

(3)ComboBox下拉框

在 ui 中有这样一个控件:ComboBox,属于下拉框,如下样式:

常用成员函数:

maxCount:最多允许有多少条目

addItem(const QString&):增加一个条目

currentIndex:获取当前条目的下标(从0开始计算)

currentText():获取当前条目的文本内容,即当前下拉框中选中的这行内容

事例1:制作一个点单下拉框

事例2:从本地文件读取内容放入下拉框

(4)SpinBox方型微调

如图在 ui 中存在这样一个控件:SpinBox,可以进行微调,样式如下:

常用的成员函数如下:

minimum:设置最小值

maximum:设置最大值

value:按钮上的值

singleStep:每次按下变化多少

例如:做一个点餐的小界面,主要在于用户可以控制餐点的数量

(这里需要注意的是需要将整型数字转化为QString,接口是:QString :: number( ) )

(5)Date/TimeEdit时间框

如图在 ui 中存在这样一个控件:Date/TimeEdit,可以进行时间微调,样式如下:

常用成员函数:

dateTime:拿到这个控件的时间,返回的是QDateTime类型

secsTo(const QDateTime &other):计算两个控件的秒数差(通过秒数手动计算更加精准)

例如:来计算两个日期的差值(天数、小时)

(QString也可以像printf那样控制格式打印,如上图,通过**.arg** 来按顺序替换%1,%2,%3....)

(6)QDial圆框微调

如图在 ui 中存在这样一个控件:QDial,可以进行圆式微调,样式如下:

常用成员函数:

minimum:最小值

maximum:最大值

notchesVisible:是否显示刻度线

notchTarget:刻度线之间的拥挤度

singleStep:每两个小格差值

常用信号:

valueChanged(int):范围变化时触发

例如:通过调整精度来调整窗口透明度

(7)QSlider滑动微调

如图在 ui 中存在这样一个控件:QSlider,可以进行圆式微调,样式如下:

常用成员函数:

(如果有需要可以修改滑动条的颜色,这里就不介绍了!)

value:当前数值

minimum:最小值

maximum:最大值

singleStep:滑动一小格变化大小

setValue:初始位置

常用信号:

valueChanged(int):数值改变时触发

例如:通过滑动窗口来控制窗口的大小

(8)QFontComboBox字体框

作用:专门用于字体的选择框

QFont currentFont():获取当前选中的字体(QFont类型)

(9)QplainTextEdit纯文本编辑器

作用:纯文本编辑器(比如自动换行、CV)

(10)QSliderBar滚动条
(11)KeySquenceEdit快捷键框

作用:获取用户输入的快捷键

keySequence():获取当前用户输入的快捷键(返回QKeySequence类型)

(12)QTextBrowser富文本编辑器

作用:专门用于显示带格式的文本(HTML、富文本),支持超链接、图片、文本样式

(13)Horizontal/Vertical Line分割线

作用:分隔线控件,分割控件,层次清晰

相关推荐
胖咕噜的稞达鸭2 小时前
C/C++动态内存管理,malloc,calloc,realloc的区别,动态内存中的错误汇总
c语言·开发语言·c++
charlie1145141912 小时前
嵌入式C++教程实战之Linux下的单片机编程(6):从点亮第一盏LED开始 —— 我们为什么要用现代C++写STM32
linux·c语言·开发语言·c++·stm32·单片机
沐知全栈开发2 小时前
Ruby 哈希(Hash)
开发语言
艾莉丝努力练剑2 小时前
【Linux系统:多线程】线程概念与控制
linux·运维·服务器·c++·后端·学习·操作系统
徒 花2 小时前
Python知识学习03
开发语言·python·学习
我命由我123452 小时前
Vue3 开发中,字符串中的 <br\> 标签被直接当作文本显示出来了,而不是被解析为 HTML 换行标签
开发语言·前端·javascript·vue.js·html·ecmascript·html5
运维行者_2 小时前
MSP网络管理破局者:IPAM+SPM插件终结IP冲突与安全威胁
运维·服务器·开发语言·网络·安全·web安全·php
人间打气筒(Ada)2 小时前
「码动四季·开源同行」go语言:如何处理 Go 错误异常与并发陷阱?
开发语言·后端·golang·defer·panic·errors·并发陷阱
wjcroom2 小时前
电子python模拟出的一个完美风暴
开发语言·python·数学建模·物理学