Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【QT】 控件 -- 按钮类(Button)

【QT】 控件 -- 按钮类(Button)

作者头像
IsLand1314
发布于 2025-01-24 01:08:58
发布于 2025-01-24 01:08:58
28200
代码可运行
举报
文章被收录于专栏:学习之路学习之路
运行总次数:0
代码可运行

1. 前言

🚀 之前我在上一篇文章已经说了 QWidget 涉及到的各种属性/函数/使用方法,针对接下来等下要介绍的 Qt 的各种控件都是有效的啦 !!!

2. Push Button 按钮

在 Qt Designer 也能看到这里的继承关系.

  • 继承关系:在 Qt Designer 中可以看到 QPushButton 的继承层次结构,它继承了 QWidget 的所有属性,并添加了一些特有的属性。

QAbstractButton 中,和 QPushButton 相关性较大的属性:

属性

说明

text

按钮中的文本。用于显示在按钮上的文字内容。

icon

按钮中的图标。可以为按钮设置一个图标,增强视觉效果或指示功能。

iconSize

按钮中图标的尺寸。指定图标的大小,确保图标在不同分辨率下都能正确显示。

shortCut

按钮对应的快捷键。允许用户通过键盘快捷键触发按钮的点击事件。

autoRepeat

按钮是否会重复触发。当鼠标左键按住不放时: - 如果设为 true,则会持续产生鼠标点击事件(相当于游戏手柄上的“连发”效果); - 如果设为 false,则必须释放鼠标,再次按下鼠标时才能产生点击事件。

autoRepeatDelay

重复触发的延时时间。按住按钮多久之后,开始重复触发。

autoRepeatInterval

重复触发的周期。即每次重复触发之间的时间间隔。

  • QAbstractButton 作为 QWidget 的子类,当然也继承了 QWidget 的属性。上面介绍的 QWidget 里的各种属性用法,对于 QAbstractButton 同样适用。因此表格仅列出 QAbstractButton 独有的属性
  • Qt 的 api 设计风格是非常清晰的,此处列出的属性都是可以获取和设置的。例如,使用 text() 获取按钮文本,使用 setText() 设置文本

事实上,QPushButton 的核心功能都是 QAbstractButton 提供的,自身提供的属性都比较简单。其中,defaultaudoDefault 影响的是按下 enter 时自动点击哪个按钮的行为,flat 把按钮设置为扁平的样式。

1、带有图标的按钮 – 纯代码实现

具体操作步骤参见上篇文章所讲的 QWidget 核心属性中的 windowIcon 部分。

老样子,先引入图片 prc,然后在界面上创建一个按钮, 再修改 widget.cpp,给按钮设置图标

2、带有快捷键的按钮 – 图形化&代码实现

1)在界面中拖五个按钮

五个按钮的 objectName 分别为 pushButton_targetpushButton_uppushButton_downpushButton_leftpushButton_right

  • 上面我们可以通过点阵把按钮对齐

2)创建 resource.qrc,并导入 5 个图片

3)修改 widget.cpp,设置图标资源和快捷键

  • 使用 setShortcut 给按钮设置快捷键,参数是⼀个QKeySequence 对象,表示一个按键序列,支持持组合键(Ctrl + C 这种)。
  • QKeySequence 的构造函数参数,可以直接使用 “Ctrl + C” 这样的按键名字符串表示,也可以使用预定义好的常量(形如 Qt::CTRL + Qt::Key_C)表示。

widget.cpp 构造函数代码修改如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 设置这些按钮的图标
    ui->pushButton_target->setIcon(QIcon(":/target.png"));
    ui->pushButton_target->setIconSize(QSize(150, 120));

    ui->pushButton_up->setIcon(QIcon(":/Up.png"));
    ui->pushButton_up->setIconSize(QSize(50, 50));

    ui->pushButton_down->setIcon(QIcon(":/down.png"));
    ui->pushButton_down->setIconSize(QSize(50, 50));

    ui->pushButton_left->setIcon(QIcon(":/left.png"));
    ui->pushButton_left->setIconSize(QSize(50, 50));

    ui->pushButton_right->setIcon(QIcon(":/right.png"));
    ui->pushButton_right->setIconSize(QSize(50, 50));

    // 按键快捷键设置

//    // 方法1:直接通过按键的名字来设置,虽然简单但易写错
//    ui->pushButton_up->setShortcut(QKeySequence("ctrl + w"));
//    ui->pushButton_down->setShortcut(QKeySequence("s"));
//    ui->pushButton_left->setShortcut(QKeySequence("a"));
//    ui->pushButton_right->setShortcut(QKeySequence("d"));

    // 方法2:通过按键的枚举来设置按键快捷键
    // ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL+ Qt::Key_W));
    ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));
    ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
    ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
    ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));
}

4)再修改 widget.cpp,设置四个方向键的 slot 函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Widget::on_pushButton_up_clicked()
{
    // 获取到 target 位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于获取的位置,设置新位置
    ui->pushButton_target->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
}

void Widget::on_pushButton_down_clicked()
{
    // 获取到 target 位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于获取的位置,设置新位置
    ui->pushButton_target->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
}

void Widget::on_pushButton_left_clicked()
{
    // 获取到 target 位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于获取的位置,设置新位置
    ui->pushButton_target->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
}

void Widget::on_pushButton_right_clicked()
{
    // 获取到 target 位置
    QRect rect = ui->pushButton_target->geometry();
    // 基于获取的位置,设置新位置
    ui->pushButton_target->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
}

5)运行程序 ,此时点击按钮,或者使用 wasd 均可让 target 移动

3、按钮的重复触发

在上述案例中按住快捷键,是可以进行重复触发的,但是鼠标点击则不能。

修改 widget.cpp,在构造函数中开启 重复触发 的功能

3. Radio Button 按钮

QRadioButton 是 单选按钮,可以让我们在多个选项中选择一个

作为 QAbstractButton 和 QWidget 的子类,上面介绍的属性和用法,对于 QRadioButton 同样适用。

QAbstractButton 中和 QRadioButton 关系较大的属性:

属性

说明

checkable

是否能选中。如果设置为 true,按钮可以在选中和未选中状态之间切换;如果设置为 false,则按钮不具备选中功能。

checked

是否已经被选中。只有当 checkable 设置为 true 时,此属性才有意义。用于检查或设置按钮当前是否处于选中状态。

autoExclusive

是否排他。对于一组按钮而言,如果其中一个按钮被选中,则其他按钮的选中状态将被取消。此属性通常用于单选按钮(如 QRadioButton),但也可以应用于 QPushButton 来实现类似的行为。

下面我们举一个 选择性别 的例子,如下:

(1)在界面上创建⼀个 label 和 3 个单选按钮

设置的文本如下图,3 个单选按钮的 objectName 分别为:radioButton_maleradioButton_femaleradioButton_other

  • 这里强调一下:如果我们的 Label 标签拉的不够长的话,可能会出现点击按钮没有变化的情况

(2)修改 widget.cpp,编辑三个 QRadioButton 的 slot 函数,然后运行程序就可以看到随着选择不同的单选按钮,label 中的提示文字就会随之变化:

(3)当前代码中,如果程序启动时并不会选择任何选项,但是可以修改代码,让程序 启动默认选中某个选项 或者 禁用某个选项被选中,如下:

  • 运行程序可以看到,点击 “其他” 按钮的时候,虽然不会被选中,但是可以触发点击事件,使上面的 label 显示性别为其他
  • 但是如果使用 setEnabled 是更彻底的禁用按钮的方式,此时该按钮无法被选中,也无法响应任何输入

还记得我们转到槽那里的四个选项,它们究竟有什么区别呢?下面我们来看看

1. click、press、release、toggled 的区别
  • clicked 表示⼀次 “点击”
  • pressed 表示鼠标 “按下”
  • released 表示鼠标 “释放”
  • toggled 表示按钮状态切换

(1)在界面上创建四个单选按钮

objectName 分别为 radioButton、radioButton_2、radioButton_3、radioButton_4

(2)给 1 创建 clicked 槽函数,给 2 创建 pressed 槽函数,给 3 创建 released 槽函数,给 4 创建 toggled 槽函数

可以看到:

  • clicked 是⼀次鼠标按下 + 鼠标标释放触发的
  • pressed 是鼠标按下触发的
  • released 是鼠标释放触发的
  • toggled 是 checked 属性改变时触发的

总的来说,toggled 是最适合 QRadioButton 的。

2. 单选框分组

1)在界面上创建 6 个单选框,用来模拟麦当劳点餐界面。

objectName 分别为 radioButton 到 radioButton_6

此时直接运行程序可以看到,这六个 QRadioButton 之间都是排他的。我们希望每一组内部来控制排他,但是 组和组之间不能排他

2)引入 QButtonGroup 进行分组

修改 widget.cpp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Widget::Widget(QWidget *parent)
 : QWidget(parent)
 , ui(new Ui::Widget)
{
 ui->setupUi(this);
 // 创建三个 QButtonGroup 
 QButtonGroup* group1 = new QButtonGroup(this);
 QButtonGroup* group2 = new QButtonGroup(this);
 QButtonGroup* group3 = new QButtonGroup(this);
 // 把 QRadioButton单选按钮 两两⼀组, 放到三个 QButtonGroup 中
 group1->addButton(ui->radioButton);
 group1->addButton(ui->radioButton_2);
 group2->addButton(ui->radioButton_3);
 group2->addButton(ui->radioButton_4);
 group3->addButton(ui->radioButton_5);
 group3->addButton(ui->radioButton_6);
}

再次执行程序可以看到可以按照正确的分组方式来完成排他了

4. Check Box 复选

QCheckBox 表示复选按钮,可以允许选中多个。和 QCheckBox 最相关的属性也是 checkablechecked,都是继承自 QAbstractButton

🔥至于 QCheckBox 独有的属性 tristate 用来实现 “三态复选框”,这个东西比较冷门,这里暂时不讲述。

【获取复选按钮的取值】

(1)在界面上创建三个复选按钮和一个普通按钮

objectName 分别为 checkBox_eatcheckBox_studycheckBox_sleep 以及 pushButton

(2)给 pushButton 添加 slot 函数,运行程序,可以看到点击确认按钮时,就会在控制台中输出选中的内容:

5. Tool Button

QToolButton 的大部分功能和 QPushButton 是一致的,但 QToolButton 主要应用在工具栏、菜单等场景。

6. 共勉

★,°:.☆( ̄▽ ̄)/$:.°★ 】那么本篇到此就结束啦,如果有不懂 和 发现问题的小伙伴可以在评论区说出来哦,同时我还会继续更新关于【Qt】的内容,请持续关注我 !!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【QT】按钮类控件
QPushButton 继承⾃ QAbstractButton . 这个类是⼀个抽象类. 是其他按钮的⽗类.
YoungMLet
2024/07/16
1680
【QT】按钮类控件
【QT】常用控件(二)
我们从这个按钮的属性表中可以看到,QPushButton的父类是QAbstractButton,上面是QAbstractButton的父类QWidget,再向上就是QWidget的父类QObject
s-little-monster
2024/10/18
1290
【QT】常用控件(二)
C++ Qt开发:RadioButton单选框分组组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QRadioButton单选框组件以及与之交互的QButtonGroup类的常用方法及灵活运用。
王 瑞
2023/12/14
1.8K0
C++ Qt开发:RadioButton单选框分组组件
Qt5学习笔记——QRadioButton与QButtonGroup[通俗易懂]
QRadioButton是一个可以switch on或off的按钮,对应的状态为checked和unchecked。一组QRadioButton通常用于表示程序中“多选一”的选择,例如单项选择题。在一组radio buttons中,同一时刻只能有一个button处于checked状态,如果用户选择了其他button,原先被选中的button将变为unchecked。
全栈程序员站长
2022/11/17
4.6K0
Qt5学习笔记——QRadioButton与QButtonGroup[通俗易懂]
【QT】显示类控件
虽然 QPushButton 也可以通过设置图标的⽅式设置图⽚,但是并⾮是⼀个好的选择。更多的时候还是希望通过 QLabel 来作为⼀个更单纯的显⽰图⽚的⽅式。
YoungMLet
2024/07/16
2680
【QT】显示类控件
Python:PyQt学习
上面的代码把控件对应的变量名全部作为全局变量。如果要设计稍微复杂一些的程序,就会出现太多的控件对应的变量名。而且这样也不利于代码的模块化。所以,我们通常应该把 一个窗口和其包含的控件,对应的代码全部封装到类中,如下所示:
小简
2023/01/04
10.8K0
Python:PyQt学习
C/C++ Qt 基础通用组件的应用
QT 是一个跨平台C++图形界面开发库,利用QT可以快速开发跨平台窗体应用程序,在QT中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率。
王 瑞
2022/12/23
3.9K0
C/C++ Qt 基础通用组件的应用
【QT】Widget 控件核心属性
Widget 是 Qt 中的核⼼概念. 英⽂原义是 “⼩部件”, 我们此处也把它翻译为 “控件” 。控件是构成⼀个图形化界⾯的基本要素.
YoungMLet
2024/07/16
3250
【QT】Widget 控件核心属性
【Qt】QWidget属性介绍
Qt中已经给我们提供了很多的控件,所以学习Qt就必须要学习和了解这些控件,学会如何使用这些控件。 编程讲究站在巨人的肩膀上 一个图形化界面的内容不需要我们从0开始实现,Qt中已经提供看很多的内容控件(按钮、文本框、单选按钮,下拉框等等),我们直接使用即可。 为了更好的使用这些控件,我们就要学习QWidget,这是因为Qt中的各种控件都是继承自QWidget 这也就表明了,QWidget的属性在它的子类中是可以使用的~ 我们点击fromfile中的ui文件,就可以看在QtCteator的右侧存在着这么一个状态栏
Yui_
2025/03/15
1160
【Qt】QWidget属性介绍
【C++】Qt:QWidget介绍与注册登陆界面示例
QWidget 是 Qt 框架中的一个基类,用于创建用户界面的可视化组件。它是所有用户界面组件的基础,包括窗口、对话框、按钮、文本框等。QWidget 提供了一组通用的功能和属性,以及与用户交互的事件处理机制。
DevFrank
2024/07/24
1K0
【C++】Qt:QWidget介绍与注册登陆界面示例
【QT】容器类控件
使用 QGroupBox 实现⼀个带有标题的分组框。可以把其他的控件放到里面作为⼀组。这样看起来能更好看⼀点。
YoungMLet
2024/07/16
1150
【QT】容器类控件
【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
像上面示例中的,按钮、列表视图、树形视图、单行输⼊框,多行输入框,滚动条、下拉框等等都可以称为 “控件”
IsLand1314
2025/01/19
1.8K0
【QT】: 初识 QWidget 控件 | QWidget 核心属性(API) | qrc 文件
C++ Qt 开发:ListWidget列表框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍ListWidget列表框组件的常用方法及灵活运用。
王 瑞
2023/12/18
2.1K0
C++ Qt 开发:ListWidget列表框组件
采用QWebEngineView引擎设计web浏览器
QWebEngineView 是QT5.4版本加入的新浏览器引擎,用于编辑、查看web内容。
DS小龙哥
2022/01/12
2.7K0
采用QWebEngineView引擎设计web浏览器
【QT】多元素控件
xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例:
YoungMLet
2024/07/16
2680
【QT】多元素控件
【QT】常用控件(一)
ui设计界面左边的这些都叫控件,除了这些以外,QT还允许自定义控件,满足不同的需求
s-little-monster
2024/10/15
2020
【QT】常用控件(一)
【QT】:控件 -- 输入类
(2)编写 widget.cpp,在构造函数中编写初始化代码,并且给按钮添加 slot 函数
IsLand1314
2025/02/02
2580
【QT】:控件 -- 输入类
Qt 学习记录
[],标识一个 Lambda 的开始,这部分必须存在,不能省略。外部变量访问方式说明符只能使用定义 Lambda 为止时 Lambda 所在作用范围内可见的局部变量(包括 Lambda 所在类的 this)。外部变量访问方式说明符有以下形式:
小简
2023/01/04
7.4K0
Qt 学习记录
Qt5之QRadioButton
本例程介绍QRadioButton的使用,包括QRadioButton的分组、多个QRadioButton控件响应同一个槽函数、QRadioButton的ID设置从而避免繁琐的判断。
bear_fish
2018/09/20
3.9K0
Qt5之QRadioButton
【QT】QSS
在widget.cpp中使用setStyleSheet方法设置样式 这属于是给Widget设置样式,这对于子控件QPushButton等也会生效
s-little-monster
2024/11/18
1400
【QT】QSS
相关推荐
【QT】按钮类控件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验