Qt类 | QPushButton类详解

文章目录

  • 一、QPushButton介绍
  • 二、Properties(属性)
  • 三、Public Functions(公共函数)
    • 1.构造函数--构造按钮对象
    • 2.autoDefault与setAutoDefault函数--获取/设置按钮的自动默认状态
    • 3.isDefault与setDefault函数-- 获取/设置按钮的默认状态
    • 4.isFlat与setFlat函数--获取/设置按钮边框是否凸起
    • 5.menu与setMenu函数--获取/设置与按钮关联的弹出菜单(菜单按钮)
  • 四、Reimplemented Public Functions(可重写的公共函数)
    • 1.minimumSizeHint函数--获取按钮的最小尺寸
    • 2.sizeHint函数--获取按钮的推荐尺寸
  • 五、Public Slots(公共槽函数)
    • 1.showMenu函数--弹出菜单
  • 六、Protected Functions(受保护的函数)
    • 1.initStyleOption函数--用于初始化 QStyleOptionButton 结构体
  • 七、Reimplemented Protected Functions(可重写的受保护的函数)

QAbstractButton类详解:https://liujie.blog.csdn.net/article/details/140490511

一、QPushButton介绍

  QPushButton是任何图形用户界面中最常用的控件。按下(点击)按钮来命令计算机执行某个操作。典型的按钮有“确定”、“应用”、“取消”、“关闭”、“是”、“否”和“帮助”。按钮显示文本标签,可以通过在文本中用和号(&)前缀来指定快捷键;还可以选择性地显示一个小图标。

按钮中重要的模式或状态包括

  • 可用或不可用(变灰,禁用)。
  • 标准按钮、菜单按钮。
  • 默认或正常。对话框中的默认按钮通常可以使用 Enter 或 Return 键“点击”。
  • 是否自动重复。
  • 是否按下。

  按钮的一个变体是菜单按钮。这些不仅提供一条命令,还提供多个命令,因为当它们被点击时,它们会弹出一个选项菜单。使用 setMenu() 方法将弹出菜单与按钮关联。

按钮的使用方式

Header:
#include <QPushButton> 
qmake:
QT += widgets

二、Properties(属性)

  • autoDefault : bool – 按钮是否是自动默认按钮

    • 属性说明:

      这个属性用于控制按钮是否是自动默认按钮。设置为 true 时,按钮将被识别为自动默认按钮。在某些 GUI 风格中,默认按钮会绘制一个额外的边框,宽度可达 3 像素或更多。

      如果按钮有一个 QDialog 父对象,则这个属性的默认值是 true;否则默认为 false。

    • 访问函数:

      bool autoDefault() const  //获取当前的自动默认状态
      void setAutoDefault(bool) //设置自动默认状态
      
    • 注意事项:

      default 属性和 autoDefault 属性之间存在交互关系

  • default : bool – 按钮是否是默认按钮

    • 属性说明:

      这个属性用于决定按钮是否是默认按钮。

      默认按钮和自动默认按钮决定了当用户在对话框中按下回车键时会发生什么。如果设置了 default 属性为 true,则该按钮将成为对话框中的默认按钮,通常在用户按下回车时自动被激活。

    • 访问函数:

      bool isDefault() const //检查按钮是否是默认按钮
      void setDefault(bool)  //设置按钮是否为默认按钮
      
    • 注意事项:

      • 存在一个例外情况:如果当前有焦点的按钮是自动默认按钮,那么即使 default 属性为 true 的按钮存在,也会优先激活有焦点的自动默认按钮。
      • 默认按钮的行为是对话框特有的,但所有按钮都可以通过空格键在获得焦点时从键盘上被激活。
      • 在对话框中,一次只能有一个按钮是默认按钮。这个按钮会显示一个额外的边框(取决于 GUI 风格)
  • flat : bool – 按钮边框是否凸起

    • 属性说明:

      这个属性用于控制按钮边框是否凸起。

      • flat 属性为 false(默认值),按钮通常会有一个凸起的边框,这是大多数按钮的常见样式。
      • flat 属性设置为 true,按钮的边框将不会显示为凸起,这可以使按钮看起来更平滑或更现代。在这种状态下,如果按钮没有被按下,大多数GUI风格可能不会绘制按钮的背景。
      • 如果希望扁平按钮在未被按下时也有背景填充,可以使用 setAutoFillBackground(true),这样按钮的背景将使用 QPalette::Button 画笔进行填充。
    • 访问函数:

      bool isFlat() const //检查按钮是否设置为扁平(无边框凸起)
      void setFlat(bool)  //设置按钮是否应该是扁平的,即没有边框凸起
      

三、Public Functions(公共函数)

1.构造函数–构造按钮对象

QPushButton::QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)
  • 函数说明:

    这是 QPushButton 的构造函数之一,允许同时指定按钮的图标和文本

  • 参数说明:

    • icon: 参数接受一个 QIcon 对象,表示按钮上显示的图标。
    • text: 参数接受一个 QString 对象,表示按钮上的文本。
    • parent: 参数指定按钮的父控件,如果提供 nullptr,则按钮没有父控件。
  • 示例:

    // 使用QIcon和QString创建按钮
    QPushButton *buttonWithIconAndText = new QPushButton(QIcon("path/to/icon.png"), "Button with Icon and Text");// 使用QPixmap作为图标创建按钮
    QPixmap pixmap("path/to/pixmap.png");
    QPushButton *buttonWithPixmap = new QPushButton(QIcon(pixmap), "Button with QPixmap");
    
  • 注意事项:

    • C++的隐式类型转换允许将 QPixmap 对象直接传递给需要 QIcon 参数的函数,这意味着可以直接使用 QPixmap 作为按钮的图标。
QPushButton::QPushButton(const QString &text, QWidget *parent = nullptr)
  • 函数说明:

    这是 QPushButton 的构造函数之一,允许指定按钮的文本。

  • 示例:

    QPushButton *button = new QPushButton("Click Me", &window);
    button->setGeometry(50, 50, 100, 30);  // 设置按钮的位置和大小
    

2.autoDefault与setAutoDefault函数–获取/设置按钮的自动默认状态

  用来获取/设置autoDefault 属性值。

bool autoDefault() const  //获取当前的自动默认状态
void setAutoDefault(bool) //设置自动默认状态

示例:

QApplication app(argc, argv);QDialog dialog;
dialog.setWindowTitle("Auto Default Button Example");QPushButton *button1 = new QPushButton("Auto Default", &dialog);
button1->setAutoDefault(true);  // 设置为自动默认按钮QPushButton *button2 = new QPushButton("Not Auto Default", &dialog);
button2->setAutoDefault(false);  // 不设置为自动默认按钮
button2->setGeometry(50, 50, 200, 50);
dialog.resize(300, 100);
dialog.show();

image-20240716220537935

当用户在对话框中按下回车键时,如果第一个按钮(“Auto Default”)有焦点,则会自动被激活。如果没有按钮有焦点,则会激活下一个自动默认按钮。第二个按钮(“Not Auto Default”)不会自动被激活,除非用户直接点击它。

3.isDefault与setDefault函数-- 获取/设置按钮的默认状态

  用来获取/设置default 属性值。

bool isDefault() const //检查按钮是否是默认按钮
void setDefault(bool)  //设置按钮是否为默认按钮

示例:

QDialog dialog;
dialog.setWindowTitle("Default Button Example");QPushButton *defaultButton = new QPushButton("OK", &dialog);
defaultButton->setDefault(true);  // 设置为默认按钮QPushButton *otherButton = new QPushButton("Cancel", &dialog);
// otherButton 不设置为默认按钮
otherButton->setGeometry(50, 50, 100, 50);dialog.resize(300, 100);
dialog.show();

image-20240716221055068

当用户在对话框中按下回车键时,“OK” 按钮将自动被激活,因为它被设置为默认按钮。如果 “OK” 按钮没有焦点,并且对话框中有其他自动默认按钮,那么有焦点的自动默认按钮将被激活。

4.isFlat与setFlat函数–获取/设置按钮边框是否凸起

  用来获取/设置flat 属性值。

bool isFlat() const //检查按钮是否设置为扁平(无边框凸起)
void setFlat(bool)  //设置按钮是否应该是扁平的,即没有边框凸起

示例:

// 创建一个按钮,并设置为扁平样式
QPushButton *button = new QPushButton("Flat Button");
button->setFlat(true); // 设置按钮为扁平样式// 确保即使按钮扁平,背景也被填充
button->setAutoFillBackground(true);

image-20240716221435751

5.menu与setMenu函数–获取/设置与按钮关联的弹出菜单(菜单按钮)

QMenu *QPushButton::menu() const
  • 函数说明:

    用于获取与按钮关联的弹出菜单(QMenu 对象)的指针。弹出菜单通常用于创建下拉菜单或右键菜单,提供按钮的附加选项或操作。如果按钮设置了弹出菜单,此函数返回该菜单的指针;如果尚未设置弹出菜单,函数返回 nullptr

void QPushButton::setMenu(QMenu *menu)
  • 函数说明:

    允许将一个 QMenu 对象与按钮关联。当一个按钮与菜单关联后,点击按钮会显示这个菜单,这样的按钮通常称为菜单按钮。

  • 示例:

    QPushButton *menuButton = new QPushButton("Options", &window);
    menuButton->setGeometry(50, 50, 100, 30);  // 设置按钮的位置和大小// 创建一个菜单并添加一些动作
    QMenu *menu = new QMenu(&window);
    menu->addAction("Open");
    menu->addAction("Save");
    menu->addSeparator();
    menu->addAction("Exit");// 将菜单与按钮关联
    menuButton->setMenu(menu);
    

    image-20240716222107698

  • 注意事项:

    • 通过 setMenu 关联菜单时,按钮不会接管菜单的所有权。这意味着 QMenu 对象的生命周期需要由其他地方管理,以确保在按钮使用期间菜单是有效的。

四、Reimplemented Public Functions(可重写的公共函数)

1.minimumSizeHint函数–获取按钮的最小尺寸

[override virtual] QSize QPushButton::minimumSizeHint() const
  • 函数说明:

    这个函数提供了控件的最小建议尺寸。重写 minimumSizeHint() 的目的是提供特定于按钮的最小尺寸

  • 示例:

    QPushButton button("Click Me");
    // 获取并打印按钮的最小尺寸提示
    QSize minSize = button.minimumSizeHint();
    qDebug() << "Minimum size hint:" << minSize.width() << "x" << minSize.height();
    //Minimum size hint: 93 x 28
    

2.sizeHint函数–获取按钮的推荐尺寸

[override virtual] QSize QPushButton::sizeHint() const
  • 函数说明:

    这个函数提供了控件的推荐尺寸。重写 sizeHint() 函数是 QPushButton 类的一个特性,允许它根据按钮的特定需求来调整推荐尺寸。

  • 示例:

    // 获取并打印按钮的推荐尺寸
    QSize sizeHint = button->sizeHint();
    qDebug() << "Button size hint:" << sizeHint.width() << "x" << sizeHint.height();
    //Button size hint: 93 x 28
    

五、Public Slots(公共槽函数)

1.showMenu函数–弹出菜单

[slot] void QPushButton::showMenu()
  • 函数说明:

    槽函数 showMenu() 用于显示与按钮关联的弹出菜单。在实际应用中,这通常会由用户的点击事件触发

六、Protected Functions(受保护的函数)

1.initStyleOption函数–用于初始化 QStyleOptionButton 结构体

[protected] void QPushButton::initStyleOption(QStyleOptionButton *option) const
  • 函数说明:

    • initStyleOption() 函数用于初始化 QStyleOptionButton 结构体。这个结构体包含了绘制按钮所需的所有信息,如按钮的尺寸、文本、图标、状态等。

    • 通过调用 initStyleOption(),子类可以快速获取一个填充了 QPushButton 相关信息的 QStyleOptionButton 实例,而无需手动设置每一个属性。

    • 在自定义按钮绘制时非常有用,开发者可以通过继承 QPushButton 并重写绘制函数(如 paintEvent()),来实现自定义的按钮外观。

    • QStyleOption::initFrom()允许从现有的控件初始化 QStyleOption 结构体。

  • 示例:

    class CustomButton : public QPushButton {
    protected:void paintEvent(QPaintEvent *event) override {QStyleOptionButton option;initStyleOption(&option);QPainter painter(this);// 自定义绘制逻辑painter.setPen(Qt::NoPen);painter.setBrush(Qt::red);painter.drawEllipse(option.rect);// 绘制文本painter.setPen(Qt::black);painter.drawText(option.rect, Qt::AlignCenter, option.text);}
    };
    

    上述是一个简单的自定义按钮。通过创建了一个继承自 QPushButtonCustomButton 类,并重写了 paintEvent() 函数。在 paintEvent() 中,我们调用 initStyleOption() 来初始化 QStyleOptionButton 结构体,并使用它来绘制一个红色的圆形按钮和文本。

七、Reimplemented Protected Functions(可重写的受保护的函数)

  下面这些函数一般用于自定义按钮时,大多数是事件函数,hitButton函数用于调整区域(给定的坐标点 pos 是否在按钮的内部区域)。

image-20240716214415036

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

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

相关文章

服务器的80和443端口关闭也能申请SSL证书

一、简介 在服务器的80和443端口关闭的情况下&#xff0c;确实可以申请SSL证书&#xff0c;但申请过程和方法会根据证书类型和验证方式的不同而有所差异。 通常如果是网站域名申请SSL证书&#xff0c;哪怕服务器的80、443端口都打不开&#xff0c;也可以通过DNS解析的方式来验…

【bypy】服务器代码定期同步到百度网盘

☆ 服务器代码定期同步到百度网盘 - 问题描述 代码的备份是一个重要的事情&#xff0c;可能经常会换服务器&#xff0c;也可能服务器会崩溃。这里教如何将代码同步到百度网盘。当然&#xff0c;智能同步到百度网盘指定的apps目录下 ★ 解决方案 step1. 安装bypy库 首先要确保…

Qt Style Sheets-设计器集成

设计器集成 Qt Designer&#xff08;Qt Designer&#xff09;是一个出色的工具&#xff0c;用于预览样式表。您可以在 Designer 中右键单击任何小部件&#xff0c;并选择“更改样式表...”来设置样式表。 在 Qt 4.2 及更高版本中&#xff0c;Qt Designer 还包括一个样式表语法…

layui 让table里的下拉框不被遮挡

记录&#xff1a;layui 让table里的下拉框不被遮挡 /* 这个是让table里的下拉框不被遮挡 */ .goods_table .layui-select-title,.goods_table .layui-select-title input{line-height: 28px;height: 28px; }.goods_table .layui-table-cell {overflow: visible !important; }.…

API取数实战:企业微信API取数教程

在数字化时代&#xff0c;企业微信不仅是一个通讯工具&#xff0c;更是企业数字化转型的重要平台。通过企业微信&#xff0c;企业能够高效连接员工、客户与合作伙伴&#xff0c;实现内部流程的自动化和智能化。本文将介绍企业微信API的应用场景和应用难点&#xff0c;并提供企业…

新发布,CAISP到底是啥?值得考吗

最近&#xff0c;百度旗下的“萝卜快跑”无人网约车引发热议&#xff0c;有很多人对其持欢迎态度&#xff0c;认为无人驾驶出租车价格低、服务好&#xff0c;不用担心司机车内抽烟&#xff0c;不用害怕司机路怒斗气&#xff0c;司乘矛盾没了&#xff0c;下雨天没人接单的麻烦也…

Java web从入门到精通 (第 2版)中文电子版

前言 《Java Web从入门到精通&#xff08;第2版&#xff09;》共分21章&#xff0c;包括Java Web应用开发概述、HTML与CSS网页开发基础、JavaScript脚本语言、搭建开发环境、JavaBean技术、Servlet技术、过滤器和监听器、Hibernate高级应用、Java Web的数据库操作、EL&#xf…

安卓手机如何恢复删除的照片?一篇文章,3个方法就够了

在这个手机摄影盛行的时代&#xff0c;我们的安卓手机早已不仅仅是一个通讯工具&#xff0c;更是记录生活、珍藏回忆的“时光机”。然而&#xff0c;生活中总有些“小插曲”让人哭笑不得——误删照片。安卓手机如何恢复删除的照片&#xff1f;别急&#xff0c;今天这篇文章就来…

代发考试战报:上海考试HCIP-Cloud Service SA云服务H13-821 ,667分险过

代发考试战报&#xff1a;7月9号上海考试HCIP-Cloud Service SA云服务H13-821 &#xff0c;667分险过&#xff0c;考试当天上午10点买的题库&#xff0c;临阵磨枪&#xff0c;看了俩小时&#xff0c; 12点去考试的&#xff0c;刚及格&#xff0c;幸好题库准&#xff0c;一天看题…

17_Shell好用工具:awk

17_Shell好用工具&#xff1a;awk grep&#xff1a;查找 sed&#xff1a;编辑 cut&#xff1a;切割 awk&#xff1a;切割 可以通过定义变量、流程控制进行深度分析加工 一、awk内置变量 内置变量列出了几个常用的 内置变量含义FILENAME文件名NFNumber Of Fields&#xff0c;单…

自己调用yolov5模型进行前向推理时的报错

当我在自己的工程中调用yolov5的目标检测模型进行推理&#xff0c;代码大致如图&#xff1a; 当运行到如图箭头所指的位置的时候报如下错误&#xff1a; Traceback (most recent call last): File “/home/yons/train/code/mmpose/inference.py”, line 81, in pred yolo_m…

Windows 11预览补丁KB5040527影响火绒驱动加载的解决办法

7 月 11 日&#xff0c;微软更新Windows 11 预览版本补丁 KB5040527&#xff0c;补丁安装后会影响火绒驱动加载导致火绒安全软件服务异常&#xff0c;补丁相关信息如下&#xff1a; https://blogs.windows.com/windows-insider/2024/07/11/releasing-windows-11-builds-22621-…

知识图谱和 LLM:利用Neo4j驾驭大型语言模型(探索真实用例)

这是关于 Neo4j 的 NaLLM 项目的一篇博客文章。这个项目是为了探索、开发和展示这些 LLM 与 Neo4j 结合的实际用途。 2023 年,ChatGPT 等大型语言模型 (LLM) 因其理解和生成类似人类的文本的能力而风靡全球。它们能够适应不同的对话环境、回答各种主题的问题,甚至模拟创意写…

blender使用(三)常用建模操作及修改器

1&#xff0c;挤出图形 tab编辑模式&#xff0c;选中一个点/线/面&#xff0c;按键E&#xff0c;可以挤出对应的图形。选中点会挤出一条线&#xff0c;线会挤出一个面&#xff0c;面挤出体 2&#xff0c;倒角 选中一个边后&#xff0c;ctrlB &#xff0c;拖动鼠标是倒角范围&am…

破解反爬虫策略 /_guard/auto.js(一) 原理

背景 当用代码或者postman访问一个网站的时候&#xff0c;访问他的任何地址都会返回<script src"/_guard/auto.js"></script>&#xff0c;但是从浏览器中访问显示的页面是正常的&#xff0c;这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…

C/C++ 关机整人代码

目录 &#x1f4d2;温馨提示 &#x1f4d2;示例代码 &#x1f4d2;代码分析 &#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&…

深入浅出消息队列----【初始篇】

深入浅出消息队列----【初始篇】 一、思考&#xff1a;为什么会出现 “消息队列”二、RocketMQ 总览producerproducer groupnameSrvBrokerBroker clusterconsumerconsumer groupTopicTag 本文仅是文章笔记&#xff0c;整理了原文章中重要的知识点、记录了个人的看法 文章来源&a…

linux下Jenkins的安装部署

前言&#xff1a; 用docker安装Jenkins非常方便快捷&#xff0c;但是最近国内的docker镜像源都不好用了&#xff0c;这里回顾一下最原始的Jenkins安装方式 安装前准备 安装环境 Jenkins的运行依赖java环境&#xff0c;linux下jdk的安装参考&#xff1a;linux下JDK的安装-CSD…

有效、轻松地从 SD 卡恢复已删除照片的教程

“我拿到了新手机&#xff0c;并将 SD 卡设置为保存手机拍摄的照片的位置&#xff1b;但是&#xff0c;我错误地删除了 SD 卡上的某些高清照片&#xff0c;如何从 SD 卡恢复已删除的照片&#xff1f;请帮忙。” 除了意外删除之外&#xff0c;许多因素都可能导致 SD 卡上的照片…

CH552G的使用IAP下载方式,下载IAP文件和用户运行代码

参考 参考&#xff1a;https://mar-sky.blog.csdn.net/article/details/140448176&#xff0c;本质一样&#xff0c;实现方式不同&#xff0c;对程序的要求不同&#xff0c;不用放在运行代码中。和下面最大区别就是代码的下载地址不同&#xff0c;IAP的代码放在的另一个区域。 …