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