Qt常用基础控件总结

news2024/12/22 19:14:08

一、按钮部件

按钮部件共同特性

Qt 用于描述按钮部件的类、继承关系、各按钮的名称和样式,如下图:
在这里插入图片描述
助记符:使用字符"&“可在为按钮指定文本标签时设置快捷键,在&之后的字符将作为快捷键。比如 “A&BC” 则 Alt+B 将成为该按钮的快捷键,使用”&"字符设置的快捷键常称为助记符,一般会在其对应字符下加上下划 线,对于 windows 当按下 Alt 键时,才会显示下划线。默认情况下 Qt 不会显示加下划线的快捷键。

按钮的排他性(或称为独占性)和排他性组(独点性组):是指位于同一组(被称为排他性组)中的可选按钮,任何时候只能有一个按钮被选中,选中一个按钮会自动取消之前选中的按钮。Qt 使用 QButtonGroup 类描棕对按钮的分组,通常单选按钮具有排他性,当然复选按钮也可以具有排他性。

可选中、被选中、选中状态:可选中是指像复选按钮或单选按钮之类的按钮,他们是可以被选中的,被选中的按钮呈现出的状态就是选中状态。对于复选按钮,选中后在前面会有一个勾形的符号,而标准按钮 QPushButton 是不可被选中的。

按钮的按下和弹起状态:当在按钮上按下鼠标不放时,按钮通常看起来像是被按下的样子,这时的状态就是按下状态。

菜单按钮:是指单击该按钮会弹出一个下拉菜单的按钮,见下图, 在 Qt 中,标准按钮 QPushButton、工具按钮 QToolButton 可设置为菜单按钮。
在这里插入图片描述
按钮的启用与禁用:按钮被禁用时通常会变灰,按钮的启用/禁用是由 QWidget 类中的enabled 属性描述的。

抽象按钮类QAbstractButton

QAbstractButton类介绍

QAbstractButton 是个抽象类,该类是标准按钮 QPushButton、复选按钮 QCheckBox、单选按钮 QRadioButton、工具按钮 QToolButton 的父类,该类描述了按钮的一些共同功能,比如单击按钮发出的信号,按钮的状态等。注意:C++语法规定,不能创建抽象类的对象。

若要子类化 QAbstractButton 类,必须重新实现 paintEvent()函数(这是个纯虚函数),以绘制按钮的轮廓或像素图,并且建议重新实现 sizeHint(),若有两个以上状态的按钮(如三态按钮),还必须重新实现 checkStateSet()和 nextCheckState()函数。

注意:若重新实现了按钮类中的事件处理函数,有可能会阻止 Qt 对按钮的默认处理行为,比如若重写了 QCheckBox 类的 mousePressEvent(),则当在该按钮上单击鼠标时,不会使按钮被选中。因此,程序员重写这些事件处理函数时,通常需要调用父类的该函数,以便使用 Qt 的默认处理行为。

按下状态与选中状态

  • Qt 在内置的默认事件处理函数 mousePressEvent()中(以鼠标点击为例)设置了按钮的按下状态,在 mouseReleaseEvent()中清除了按钮的按下状态。也就是说,若程序员仅仅重写了按钮的 mouseReleaseEvent() 函数,且在其中未清除按钮的按下状态,则当使用鼠标点击按钮后,按钮后一直处于按下状态。若重写了 mousePressEvent()函数,且未对按钮设置按下状态,则当用鼠标点击按钮时,则按钮不会出现按下状态。读者可自行编写程序进行验证。
  • 按下状态与选中状态的默认执行顺序是:当用鼠标点击按钮时(使用其他方式点击按钮类似),首先设置按下状态,然后设置选中状态,若再次用鼠标点击按钮,也是首先设置按下状态,然后再清除按钮的选中状态。在每次鼠标释放时会清除按钮的按下状态。

QAbstractButton 类中的属性函数

在这里插入图片描述
1)autoExclusive:bool 访问函数:bool autoExclusive() const; void setAutoExclusive(bool);
描述了按钮的自动排他性,若启用了该属性,则属于同一父部件的可选中按钮的行为,就好像是在同一排他性组中的按钮一样。除了单选按钮,默认为关闭。

2)autoRepeat:bool 访问函数:bool autoRepeat () const; void setAutoRepeat(bool);
描述了按钮是否启用自动重复。当按钮处于按下状态(比如按下按钮不放)时,会以固定间隔发送 pressed(),released(),clicked()信号。默认为关闭。经测试,自动重复对默认按钮无效,也就是按下 enter 键时,即使关闭自动重复,默认按钮仍会重复发送上述信号。

3)autoRepeatDelay:int 访问函数:int autoRepeatDelay() const; void setAutoRepeatDelay(int);
自动重复的初始延迟(毫秒)

4)autoRepeatInterval:int 访问函数:int autoRepeatInterval() const; void setAutoRepeatInterval(int);
自动重复的时间间隔(毫秒)

5)checkable:bool 访问函数:bool isCheckable() const; void setCheckable(bool);
按钮是否可选中,默认为可选中

6)checked:bool 访问函数:bool isChecked()const; void setChecked(bool)
按钮是否被选中(即是否处于选中状态),只有可选中按钮才能被选中。默认未被选中。

7)down:bool 访问函数:bool isDown()const;void setDown(bool);
按钮是否被按下(即是否处于按下状态)。若此属性为 true,则按钮被按下。若把此属性设置为 true,则不会发送 pressed()和 clicked()信号(经测试,仍会发送这些信号)。默认为 false。

8)icon:QIcon 访问函数:QIcon icon() const; void setIcon(const QIcon &);
按钮上显示的图标。

9)iconSize:QSize 访问函数:QSize iconSize() const; void setIconSize(const QSize);
按钮上显示的图标的大小。默认大小由 GUI 样式定义。这是图标的最大大小,较小的图标不会被放大。

10)shortcut :QKeySequence
访问函数:QKeySequence shortcut() const; void setShortcut(const QKeySequence&);
保存与按钮关联的助记符,QKeySequence 类型见后文

11)text:QString 访问函数:QString text()const; void setTex t(const QString&);
按钮上显示的文本。若按钮没有文本,则 text()返回一个空字符串。

QAbstractButton 类中的常见函数

1)QAbstractButton(QWidget *parent=Q_NULLPTR); //构造函数

2)QButtonGroup* group() const //该函数见后文。
返回此按钮所属的组,若按钮不是任何 QButtonGroup 的成员,则返回 0。

QAbstractButton 类中的信号

1)void clicked(bool checked =false);
以下情形会发送此信号:

  • 鼠标点击按钮然后释放时,注意:按钮释放时才会发送。
  • 调用 click()或 animateClick()函数时。
  • 按下对应的快捷键或空格键时。
  • 当调用 setDown()、setChecked()或 toggle()函数时,不会发送该信号。
  • 若按钮是可选中的,当按钮被选中时,参数 checked 为 true,若按钮未被选中,则为 false。
  • 需要注意的是 QWidget 类并不发送此信号及 pressed 和 released 信号。

2)void pressed(); 按下按钮时发送此信号

3)void released(); 释放按钮时发送此信号。

4)void toggled(bool checked);

  • 每当可选中按钮切换状态时,都会发送此信号。若按钮被选中,则参数 checked为 true,若按钮被取消选中,则为 false。
  • 按钮状态的改变可能是由于用户操作,click()槽函数或 setChecked()函数被调用的
    结果。
  • 在发出信号前,将更新排他性按钮组中按钮的状态,

QAbstractButton 类中的槽函数

1)void animateClick(int m=100);
执行动画单击:即,立即按下按钮,然后在 m 毫秒之后释放。在释放按钮之前再次调用此函数,会重新设置计时器。所有与单击有关的信号都会根据情况发出。若该按钮被禁用,则此功能不起作用。

2)void click()
此槽接收来自与点击相关的常见信号,若按钮是可选中的,则切换该按钮的状态。若该按钮被禁用,则此槽函数不起作用。

3)void toggle(); 切换可选中按钮的状态。

QAbstractButton 类中的虚函数(受保护的)

1)void checkStateSet()
当使用 setChecked()时,会调用此虚函数,除非它是在 nextCheckState()中调用的。它允许子类重置其中间按钮状态。

2)bool hitButton(const QPoint &pos) const;
若 pos 位于可单击按钮的矩形内,则返回 true,否则返回 false。可单击区域默认是整个部件,子类可重新实现此函数,以提供对不同形状和大小的可单击区域的支持。

3)void nextCheckState()
当按钮被单击时,调用此虚函数,该函数允许子类实现中间按钮状态。

4)void paintEvent(QPaintEvent* e)=0; 这是个纯虚函数,子类必须重新实现该函数。

标准按钮控件QPushButton 类

QPushButton 类介绍

默认按钮:是指当用户按下 enter 时,默认按钮会被自动按下。

自动默认按钮:是指在满足一些条件时会自动成为默认按钮的按钮,比如当自动默认按钮获得焦点时,会自动成为默认按钮,普通按钮即使获得焦点也不会成为默认按钮。

默认按钮和自动默认按钮,在其周围通常会绘制一个额外的边框,最多可达 3 个像素或更多,Qt 会保留这个空间在默认按钮的周围,因此,自动默认按钮和默认按钮可能会有更大的默认尺寸。在 Qt 中,自动默认按钮不会显示这个边框,但默认按钮会显示,因此,从外观上看,有这个边框的按钮就是默认按钮。

默认按钮基本规则:

  • 一次只能有一个按钮是默认按钮,若同时设置多个默认按钮,则最后设置的按钮是默认按钮。
  • 按下空格键始终单击的是具有焦点的按钮(这是按下空格键与 enter 键的不同)。
  • 应使用信号和槽,而不是事件来响应默认按钮的操作。比如对于默认按钮,应把clicked()、pressed()或 released()信号与某个槽关联,以响应默认按钮按下时的操作,若使用鼠标或键盘事件,将不能达到预期的效果,因为按下 enter 键不是鼠标事件,而键盘事件会接收来自键盘的所有按键的事件。
  • 经测试,QPushButton 的 autoRepeat (自动重复)属性对默认按钮无效,也就是说即使关闭自动重复,当按下 enter 键时,仍会重复发送信号,注意,仅针对按下 enter 键,若按下的是空格键,则自动重复是有作用的。

默认按钮与自动默认按钮的行为:默认按钮的行为仅在对话框中有作用,也就是说若不是在对话框中,则不一定按以下规则执行。

  • 按下 enter (回车)键时,若自动默认按钮当前具有焦点,则按下自动默认按钮。
  • 按下 enter (回车)键时,若对话框中有自动默认按钮但没有默认按钮,则按下当前具有焦点的自动默认按钮,若此时没有按钮具有焦点,则按下焦点链中的下一个自动默认按钮。

QPushButton 类中的属性函数

1)autoDefault:bool 访问函数:bool autoDefault() const; void setAutoDefault(bool);
若此属性为 true,则此按钮是一个自动默认按钮。若按钮的父部件是 QDialog,则此
属性的默认值为 true,否则为 false。
2)default:bool 访问函数:bool isDefault() const; void setDefault(bool);
此属性描述了是否为默认按钮。默认为 false。
3)flat:bool 访问函数:bool isFlat() const; void setFlat(bool);
此属性描述了是否提高按钮的边框。若此属性为 true,大多数样式不会绘制按钮的背景,除非按下按钮。也就是说,若该属性为 true,在通常情况下,若不按下按钮,则该按钮看起来就像一个标签一样,是平的。setAutoFillBackground() 函数可确保使用QPalette::Button 画刷填充背景。默认为 false。

QPushButton 类中的常用函数

1)QPushButton (QWidget* parent = Q_NULLPTR);
QPushButton (const QString &text , QWidget* parent = Q_NULLPTR)
QPushButton (const QIcon &icon , const QString &text , QWidget* parent = Q_NULLPTR)

2)QMenu* menu() const;
返回与此按钮相关的弹出菜单,若未设置弹出菜单,则返回 0。菜单详见相关章节

3)void setMenu (QMenu * menu);
将弹出菜单 menu 与按钮关联,这会使按钮成为菜单按钮。

4)void showMenu(); //槽
显示(弹出)与此按钮相关联的弹出菜单,若没有菜单,则什么也不做。在用户关闭弹出菜单之前,该函数不会返回。

复选按钮控件QCheckBox 类

复选按钮的第三状态(见下图 的选中状态):是指除了选中和未选中状态之外的第三种状态,这种状态用来指示“不变”,表示用户既不选中也不取消选中该复选按钮。可使用 setTristate()函数启用这种状态,使用 checkState()检查按钮的当前状态。
在这里插入图片描述

QCheckBox 类的常见函数

1)tristate:bool 访问函数:bool isTristate() const; void setTristate(bool y=true);
该属性保存复选按钮是否为三态按钮,默认为 false。注意:属性的设置函数 setTristate只能设置此按钮具有三态按钮的形式,但不能使该按钮呈现出第三种状态,即按钮前面的小方框内不会有小黑方框的填充,但点击该按钮,会在三种状态间变换。设置按钮的状态应使用下面介绍的成员函数 setCheckState()。

2)QCheckBox(QWidget* parent = Q_NULLPTR); //构造函数
QCheckBox(const QString &text , QWidget* parent = Q_NULLPTR);

3)Qt::CheckState checkState() const; //返回复选框的选中状态。

4)void setCheckState(Qt::CheckState state);
设置复选按钮的状态为 state ,该函数可设置复选按钮的三种状态,QAbstractButton::setChecked()只能设置两种状态。Qt::CheckState 枚举如下:

  • Qt::Unchecked:未选中
  • Qt::PartiallyChecked:部分被选中,一个项目中的子项目被选中(但不是全部),则该项目就是部分选中状态。
  • Qt::Checked: 选中

5)void stateChanged(int state); //信号
当复选按钮的状态发生变化时发送该信号。若复选按钮具有三态形式,则按钮会在“选中、未选中、部分选中”三种状态间变化,只要这三种状态变化都会发送该信号,但QAbstractButton::toggled()信号在三种状态间变化时,则不一定会发送。

单选按钮控件QRadioButton 类

单选按钮默认是具有排他性的,还要注意的是单选按钮没有第三种状态。

单选按钮比较简单,其成员仅有构造函数,其余成员都是继承自父类或重新实现的父类中的函数,其构造函数如下所示:
QRadioButton(QWidget* parent = Q_NULLPTR);
QRadioButton(const QString &text , QWidget* parent = Q_NULLPTR)

工具按钮控件QToolButton 类

QToolButton 类介绍

工具按钮通常不显示文本标签,仅仅是一个图标。

工具按钮通常还具有自动提升的样式,即当鼠标指向该按钮时,按钮会虽现 3D 效果。当工具按钮位于 QToolBar( 工具栏 ) 中时,会自动打开该功能,可通过使用QToolButton::setAutoRaise()进行设置。

工具按钮还可以具有弹出式菜单,通常该菜单会延迟一段时间才会显示,最常见的是“返回”按钮,当按住“返回”按钮一段时间后,会弹出一个菜单,如下图。
在这里插入图片描述
工具按钮通常需要添加一个 QAction 实例,这个实例主要用于响应按下工具按钮应该响应的动作,使用该实例可使菜单和工具按钮的动作保持同步(一致)。有关该实例的具体内容请参阅相关章节。

QToolButton 类中的属性函数

1)arrowType:Qt::ArrowType
访问函数:Qt::ArrowType arrowType() const;void setArrowType(Qt::Ar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1658450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

铁山靠之数学建模 - Matlab入门

Matlab基础 1. Matlab界面与基本操作1.1 matlab帮助系统1.2 matlab命令1.3 matlab功能符号1.4 matlab的数据类型1.5 函数计算1.6 matlab向量1.7 matlab多项式1.8 M文件1.9 函数文件1.10 matlab的程序结构1.11 echo、warning和error函数1.12 交互输入1.13 程序调试1.14 设置断点…

游戏陪玩平台app小程序H5源码交付游戏陪玩接单软件游戏陪玩源码 陪玩小程序陪玩工作室运营模式陪玩管理系统游戏陪玩工作室怎么做

提供陪玩平台源码,陪玩系统源码,陪玩app源码,团队各部门配备齐全,分工明确,及时对接开发进度,保证开发效率 一、陪玩平台源码的功能介绍 1、派单大厅:陪玩系统源码的派单大厅内支持用户通过语音连麦的方式…

idea已配置的git仓库地址 更换新的Git仓库地址 教程

文章目录 目录 文章目录 更改流程 小结 概要更改流程技术细节小结 概要 先在idea控制台走一下流程 先将本地的git仓库删除 1. 查看当前远程仓库地址: 在终端或命令行中,导航到你的项目目录,并运行以下命令查看当前的远程仓库地址&#xff…

QT+MYSQL数据库处理

1、打印Qt支持的数据库驱动&#xff0c;看是否有MYSQL数据库驱动 qDebug() << QSqlDatabase::drivers(); 有打印结果可知&#xff0c;没有MYSQL数据库的驱动 2、下载MYSQL数据库驱动&#xff0c;查看下面的文章配置&#xff0c;亲测&#xff0c;可以成功 Qt6 配置MySQL…

智能BI(后端)-- 系统异步化

文章目录 系统问题分析什么是异步化&#xff1f;业务流程分析标准异步化的业务流程系统业务流程 线程池为什么需要线程池&#xff1f;线程池两种实现方式线程池的参数线程池的开发 项目异步化改造 系统问题分析 问题场景&#xff1a;调用的服务能力有限&#xff0c;或者接口的…

phpstudy(MySQL启动又立马停止)问题的解决办法

方法一&#xff1a;查看本地安装的MySQL有没有启动 1.鼠标右击开始按钮选择计算机管理 2.点击服务和应用程序 3.找到服务双击 4.找到MySQL服务 5.双击查看是否启动&#xff0c;如启动则停止他&#xff0c;然后确定&#xff0c;重新打开phpstudy,启动Mysql. 方法二&#xff…

OpenHarmony 实战开发——3.1 Release + Linux 原厂内核Launcher起不来问题分析报告

1、关键字 Launcher 无法启动&#xff1b;原厂内核&#xff1b;Access Token ID&#xff1b; 2、问题描述 芯片&#xff1a;rk3566&#xff1b;rk3399 内核版本&#xff1a;Linux 4.19&#xff0c;是 RK 芯片原厂发布的 rk356x 4.19 稳定版内核 OH 版本&#xff1a;OpenHa…

net7部署经历

1、linux安装dotnet命令&#xff1a; sudo yum install dotnet-sdk-7.0 或者直接在商店里安装 2、配置反向代理 127.0.0.1:5000》localhost 访问后报错 原因&#xff1a;数据表驼峰名&#xff0c; 在windows的数据表不区分大小写&#xff0c;但是在linux里面是默认区分的&…

xiuno(修罗)知乎模板二开优化魔板仿网盘资源社–模板加全套插件

使用说明 以服务器为例搭建教程 ①先安装 PHP7.1 版本 再安装数据库 Mysql ②解压文件&#xff1a;xiunobbs_4.0.4&#xff08;解压到根目录&#xff09;.zip ③解压②完成后找到【plugin】文件夹再解压&#xff1a;plugin(解压到 plugin 文件夹).zip 设置伪静态代码在上面&am…

记录如何查询域名txt解析是否生效

要查询域名的TXT记录&#xff0c;可以使用nslookup命令。具体步骤如下&#xff1a;12 打开命令行终端。输入命令 nslookup -qttxt 域名&#xff0c;将"域名"替换为你要查询的实际域名。执行命令后&#xff0c;nslookup会返回域名的TXT记录值。 如何查询域名txt解析是…

【C++后端项目】负载均衡OJ服务器

文章目录 一、演示项目二、所用技术与开发环境所用技术开发环境 三、项目宏观结构I. 风格&#xff1a;仿leetcodeII. 结构&#xff1a;Browser-Server模式III. 编写思路&#xff1a;编译服务 -> OJ服务 -> 前端设计 四、关于Git分支管理✨4.1 Git 分支结构4.2 Git 分支命…

【linux】主分区,扩展分区,逻辑分区,动态分区,引导分区,标准分区

目录 主分区&#xff0c;扩展分区&#xff0c;逻辑分区 主分区和引导分区 主分区&#xff0c;扩展分区&#xff0c;逻辑分区&#xff08;标准分区&#xff09; 硬盘一般划分为一个“主分区”和“扩展分区”&#xff0c;然后在扩展分区上再分成数个逻辑分区。 磁盘主分区扩展…

调用 gradio 创建聊天网页报错(使用远程服务器)

文章目录 写在前面1、使用默认IP地址&#xff08;失败&#xff09;2、使用本地IP地址&#xff08;失败&#xff09;3、使用远程服务器IP地址&#xff08;成功&#xff09; 写在前面 我复现了github上的 llama-chinese 的工作 使用的是 llama2&#xff0c;环境配置是在远程服务…

如何使用 ArcGIS Pro 计算容积率

容积率是指地上建筑物的总面积与用地面积的比率&#xff0c;数值越小越舒适&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro 计算容积率&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的建筑和小区数据&#xff0c;除了建筑和小区数据&am…

智能合约是什么?搭建与解析

智能合约是一种基于区块链技术的自动化执行合约&#xff0c;它通过编程语言编写&#xff0c;并在区块链网络上部署运行。智能合约是区块链技术的重要组成部分&#xff0c;它使得去中心化应用&#xff08;DApp&#xff09;的开发变得更加便捷和高效。本文将从智能合约的搭建、原…

如何解决 NPM依赖下载超时问题 :npm ERR! network timeout at: https://registry.npmjs.org/猫头虎

如何解决 NPM依赖下载超时问题 &#xff1a;npm ERR! network timeout at: https://registry.npmjs.org/猫头虎 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试…

正交频分复用回顾(通俗易懂)

OFDM我们知道&#xff0c;叫做正交频分复用&#xff0c;它是4G的一个关键技术&#xff0c;4G的多址技术叫做OFDMA&#xff0c;也就是说4G是通过OFDM来作用户区分的&#xff0c;具体是什么意思呢&#xff1f;继续往下看。 图1 在2G和3G时代&#xff0c; 单用户都是用的一个载波…

Golang——Strconv包

func ParseBool(str string) (value bool, err error) strconv包实现了基本数据类型与其字符串表示的转换&#xff0c;主要有以下常用函数&#xff1a;Atoi()&#xff0c;Itoa()&#xff0c;parse系列函数&#xff0c;format系列函数&#xff0c;append系列函数。 1.1 string与…

休斯《公共管理导论》第4版教材精讲视频网课+考研真题讲解

内容简介 本课程是休斯《公共管理导论》&#xff08;第4版&#xff09;精讲班&#xff0c;为了帮助参加研究生招生考试指定考研参考书目为休斯《公共管理导论》&#xff08;第4版&#xff09;的考生复习专业课&#xff0c;我们根据教材和名校考研真题的命题规律精心讲解教材章节…

防爆手机在石油化工行业中的作用是什么?

在石油化工行业这一高风险领域中&#xff0c;安全始终被置于首要位置。而在这样的环境中&#xff0c;通信设备的选择尤为关键。防爆手机&#xff0c;作为专为危险环境设计的通信设备&#xff0c;其在石油化工行业中的作用不容忽视。 它不仅能在易燃易爆的复杂环境中稳定运行&am…