QT学习07:五种按钮控件

news2024/11/24 14:56:44

文章首发于我的个人博客:欢迎大佬们来逛逛

文章目录

  • 抽象类:QAbstractButton
  • QPushButton
  • QToolButton
  • QCommandLinkButton
  • QRadioButton
  • QCheckBox
  • QButtonGroup

抽象类:QAbstractButton

是所有按钮类的祖先。请添加图片描述

QAbstractButton的信号

  • void clicked(bool checked = false) : 是否选中按钮
  • void pressed(): 点击按钮
  • void released(): 释放按钮
  • void toggled(bool checked): 检测是否被选中

QPushButton

最常用的按钮控件之一。

构造函数:

设置图标,文本信息,父窗口

QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr)
QPushButton(const QString &text, QWidget *parent = nullptr)
QPushButton(QWidget *parent = nullptr)

它继承自抽象按钮类:QAbstractButton

常用操作:

  1. setCheckable:设置按钮被选中(默认不会被选中),如果被选中则会触发 toggled 信号,但是不会触发**clicked**,它只有在点击时才会触发。
  2. setFlat:设置按钮扁平化
  3. setMenu:为按钮添加菜单
  4. setIconsetShortcutsetText:设置图片,快捷键,文本等

示例:

void Widget::testPushButton()
{
    auto btn=new QPushButton(style()->standardPixmap(QStyle::SP_DialogCloseButton),"干我",this);

    auto menu=new QMenu(this);
    menu->addMenu("唱跳");
    menu->addMenu("RAP");
    menu->addMenu("篮球");

    //添加按钮菜单
    //btn->setMenu(menu);

    //设置按钮扁平化
    btn->setFlat(true);

    //设置能被选中
    btn->setCheckable(true);

    //检测是否被选中
    connect(btn,&QPushButton::toggled,this,[=](bool checked){qInfo()<<"toggled"<<checked;});
}

QToolButton

工具按钮,用于显示菜单上的小工具等。

请添加图片描述

构造函数:

QToolButton(QWidget *parent = nullptr)

同样继承自抽象按钮类:QAbstractButton

常用操作:

  1. 具有上面的QPushButton介绍的所有常用操作。
  2. setToolButtonStyle:设置图标后指定文字和图片的位置,来自Qt::ToolButtonStyle
  3. setAutoRaise:设置按钮的点击动态效果
  4. setArrowType:设置此按钮为箭头而不是图标

示例:

void Widget::testToolButton()
{
    auto btn=new QToolButton(this);
    btn->setText("ToolButton");
    btn->setIcon(style()->standardPixmap(QStyle::SP_ComputerIcon));
    //设置文字与图标显示位置
    btn->setToolButtonStyle(Qt::ToolButtonStyle::ToolButtonTextUnderIcon);

    //btn->setArrowType(Qt::ArrowType::RightArrow); //展现为箭头
    auto menu=new QMenu(this);
    menu->addMenu("唱跳");
    menu->addMenu("RAP");
    menu->addMenu("篮球");
    btn->setMenu(menu);

    //设置按钮菜单弹出模式
    btn->setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup);
    //设置按钮点击动态效果
    btn->setAutoRaise(true);

}

QCommandLinkButton

此按钮用于命令行链接(进入某链接的按钮

请添加图片描述

构造函数:

QCommandLinkButton(const QString &text, const QString &description, QWidget *parent = nullptr)
QCommandLinkButton(const QString &text, QWidget *parent = nullptr)
QCommandLinkButton(QWidget *parent = nullptr)

它继承自:QPushButton

常用操作:

  1. 具有父类的所有操作
  2. setDescription:专属的操作,可以设置描述文本
void Widget::testCommandLinkButton()
{
    auto btn=new QCommandLinkButton("Github",this);
    btn->setDescription("点击跳转到Github");
    connect(btn,&QCommandLinkButton::clicked,this,[](){
        qInfo()<<"正在打开!";
    });
}

QRadioButton

单选框按钮

请添加图片描述

构造函数:

QRadioButton(const QString &text, QWidget *parent = nullptr) 
QRadioButton(QWidget *parent = nullptr)

同样继承自:QAbstractButton

常用操作:

  1. 参见上面的QPushButton。

示例:

void Widget::testRadioButton(){
    auto btn1=new QRadioButton("男",this);
    auto btn2=new QRadioButton("女",this);
    btn2->move(0,35); 
    btn1->setIcon(QIcon("loginIcon.png"));
}

QCheckBox

复选框,用于多选

https://img-blog.csdnimg.cn/0f77f7dc84c8450e9eb90492d74c2c3e.png

构造函数:

QCheckBox(const QString &text, QWidget *parent = nullptr)
QCheckBox(QWidget *parent = nullptr)

复选框具有以下三种状态:(三态模式)

  1. Qt::check: 选中
  2. Qt::Uncheck:未选中
  3. Qt::PartiallyChecked:部分选中

特别操作:

  1. setExclusive:设置为不排斥状态,即可以多选,因为这个QCheckBox默认是排斥的,需要手动设置以下。

信号:

 void stateChanged(int state):当复选框的状态发生改变
void Widget::testcheckButton(){
    auto btn1=new QCheckBox("打篮球",this);
    auto btn2=new QCheckBox("唱",this);
    auto btn3=new QCheckBox("跳",this);
    btn2->move(0,35);
    btn3->move(0,70);
    btn1->setIcon(QIcon("loginIcon.png"));
    //设置三态    
		btn1->setTristate(true); 
    connect(btn1,&QCheckBox::toggled,this,[=](bool check){qInfo()<<check;});
    connect(btn1,&QCheckBox::stateChanged,this,[](int state){
				qInfo()<<Qt::CheckState(state);    
		});}

QButtonGroup

按钮管理类,可以将所有的按钮放入此类中进行统一管理 它具有每一个按钮的id,以便能够根据id管理每一个按钮。

请添加图片描述

构造函数:

QButtonGroup::QButtonGroup(QObject *parent = nullptr)

继承自:QObject

常用操作:

  1. buttons:获取该组中的所有按钮,返回的是一个QList
  2. id:获得编号为id的按钮
  3. setId:设置按钮编号
  4. addButton:添加按钮并且设置它在该组中编号
void Widget::testButtonGroup()
{
    auto btnSexGroup=new QButtonGroup(this);
    //性别组
    btnSexGroup->addButton(new QRadioButton("男",this),0);
    btnSexGroup->addButton(new QRadioButton("女",this),1);
    btnSexGroup->addButton(new QRadioButton("人妖",this),2);
    btnSexGroup->addButton(new QRadioButton("日本人",this),3);
    auto sexLists=btnSexGroup->buttons(); //获取按钮的所有按钮
    for (int i=0;i<sexLists.size();i++){
        btnSexGroup->button(i)->move(0,i*35);
    }

    //收入组
    auto btnIncomeGroup=new QButtonGroup(this);
    btnIncomeGroup->addButton(new QRadioButton("5k-1w",this),0);
    btnIncomeGroup->addButton(new QRadioButton("1w-2w",this),1);
    btnIncomeGroup->addButton(new QRadioButton("2w-5w",this),2);
    btnIncomeGroup->addButton(new QRadioButton("5w-10w",this),3);
    auto incomeLists=btnSexGroup->buttons(); //获取按钮的所有按钮
    for (int i=0;i<incomeLists.size();i++){
        btnIncomeGroup->button(i)->move(150,i*35);
    }

    //你喜欢的偶像
    auto btnYourLove=new QButtonGroup(this);
    btnYourLove->addButton(new QCheckBox("蔡徐坤",this),0);
    btnYourLove->addButton(new QCheckBox("陈立农",this),1);
    btnYourLove->addButton(new QCheckBox("范丞丞",this),2);
    btnYourLove->addButton(new QCheckBox("王源",this),3);
    btnYourLove->addButton(new QCheckBox("易烊千玺",this),4);
    auto loveLists=btnYourLove->buttons(); //获取按钮的所有按钮
    for (int i=0;i<loveLists.size();i++){
        btnYourLove->button(i)->move(300,i*35);
    }
    //多选按钮默认是排斥的
    qInfo()<<btnYourLove->exclusive(); //true
    btnYourLove->setExclusive(false); //设置不排斥
}

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

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

相关文章

【appium】appium自动化入门之API(中)

上一篇介绍了在appium上启动app和两个定位元素的小工具使用方法&#xff0c;这篇就从appium的一种小方法&#xff1a;远程控制&#xff0c;以及如何把appium上的输入法调整成中文&#xff0c;算是两个小技巧吧 目录 正文 2.4 Remote 远程控制 前言 2.4.1 设置 IP 2.4.2 访问地址…

OpenMMLab-AI实战营第二期-课程笔记-Class 3:RTMPose关键点检测

Class 3&#xff1a;RTMPose关键点检测 文章目录 Class 3&#xff1a;RTMPose关键点检测概述安装相关库为了方便使用者快速上手 MMPose&#xff0c;这次课程有着丰富的示例代码脚本&#xff0c;以及详细的技术文档&#xff0c;包括安装、数据集准备、使用教程、常见问题解答等。…

Pycharm+pytest+allure打造高逼格的测试报告

目录 前言&#xff1a; 1、安装allure 2、安装allure-pytest 3、一个简单的用例test_simpe.py 4、在pycharm底部打开terminal 5、用allure美化报告 6、查看报告 总结&#xff1a; 前言&#xff1a; 今天分享的内容&#xff1a;在Pycharmpytest基础上使用allure打造高逼格…

Spring注入

前言 向一个普通的类中注入数据有什么方法&#xff1f; set方法 构造方法 依赖注入描述了在容器之间建立bean与bean之间依赖关系的过程&#xff0c;如果bean运行需要的是数字或者字符串呢&#xff1f; 引用类型 基本数据类型与String 依赖注入方式 setter注入 简单类型…

HUAWEI悦盒ec6108v9c 如何刷成海纳思系统(家用低功耗服务器,使用Home Assistant服务)

环境&#xff1a; 1.HW悦盒ec6108v9c一套 2.16G U盘 3.格式化软件USB_format.exe 4.固件 mv100-mdmo1g-usb-flash.zip&#xff08;底层是Ubuntu 20.04系统&#xff09; 5.十字螺丝刀 6.翘片/薄铲子 7.有线网络环境 8.镊子/回形针 问题描述&#xff1a; 最近玩智能家居…

最近我面了15个人,发现这些测试人都有个通病

最近公司离职好几个测试&#xff0c;也是赶上程序员跳槽的多&#xff0c;老板叫我招2个测试进来。4天时间面了15个人&#xff0c;怎么说呢&#xff0c;基本上没有符合要求的&#xff0c; 也没别的意思&#xff0c;因为我们公司小&#xff0c;开的薪水也不高&#xff0c;所以来…

Oracle中xmltype类型toObject函数用法实例

Oracle中xmltype类型toObject函数用法总结。 用法总结 xmltype是oracle中的type object类型。在实际使用中&#xff0c;可以当做xml对象来使用&#xff1a; set serveroutput ondrop type person_typex; create type person_typex is object (name varchar2(32),age number …

每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户

文章目录 每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户每日语录第25题&#xff1a;1. 需求列表1. 初级题: 每日活跃用户 思路分析(1) 创建表(2) 思路 答案获取加技术群讨论附表文末SQL小技巧 后记 每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户 大家好…

【React】路由,Hooks

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 路由Navigate导航组件 路由的嵌套useNavigate路由传递参数route配置抽取 路由 通过Link组件就可…

AntDB 事务机制

全局一致性 AntDB 的集群架构包括&#xff0c;一个 GTM&#xff08;Global Transaction Manager&#xff09;、多个Coordinator&#xff08;CN&#xff09;、多个 Datanode&#xff08;DN&#xff09;。其中 GTM 负责给其他的 DN 和CN 分发集群全局唯一的事务号和集群当前判断…

QT--配置Opencv

提示&#xff1a;本文为学习记录&#xff0c;若有疑问&#xff0c;请及时联系作者。 文章目录 前言一、下载已编译的opencv1..解压2..path路径 二、使用步骤1..pro文件2..h文件 总结 前言 只做第一个我&#xff0c;不做第二个谁。 一、下载已编译的opencv 适用于mingw编译器…

如何学习数据结构与算法? - 易智编译EaseEditing

学习和提升数据结构与算法的能力可以通过以下几个步骤&#xff1a; 学习基础知识&#xff1a; 了解数据结构和算法的基本概念和原理&#xff0c;包括常见的数据结构&#xff08;如数组、链表、栈、队列、树、图等&#xff09;和算法&#xff08;如排序、搜索、图算法等&#…

GreenPlum监控工具GPCC部署

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

Fiddler抓包工具之fiddler的命令行窗口用法

fiddler的命令行窗口的相关命令 在fiddler官网有QuickExec使用教程&#xff0c;地址是http://docs.telerik.com/fiddler/knowledgebase/quickexec QuickExec 命令行窗口位于fiddler左下角黑色输入框&#xff0c;如下图&#xff1a; 按ALT Q&#xff0c;将焦点快速设置到Quic…

initramfs 最全解释与制作

先提几个问题&#xff1a; 0、什么是 initrd 和 initramfs&#xff1f; 概述 现代Linux系统都使用到了一种功能比较特殊的微型系统&#xff0c;作为Linux内核初始化完成但未进入最终系统时的过渡系统&#xff0c;主要的目的是为了将最终系统载入到根文件系统上&#xff0c;辅…

这个618,网工最值得买的路由器/交换机设备

大家好&#xff0c;我是老杨。 有小友最近扎堆冒出来问我&#xff0c;企业要采购路由器/交换机&#xff0c;买啥牌子好&#xff0c;买啥型号好。 又或者是&#xff0c;家里要买家用的路由器/电脑&#xff0c;啥性价比最高&#xff1f; 我真的很想吐槽一句&#xff0c;你们再问…

敏捷软件测试常见的七个误区

敏捷软件开发是从1990年代开始逐渐引起广泛关注的一种新型软件开发方法&#xff0c;是能够应对快速变化的需求的一种软件开发能力&#xff0c;它作为一种新型的开发模式&#xff0c;被越来越多地应用到软件项目中。 敏捷软件测试指的是在敏捷软件开发过程中跟质量相关的一系列…

Appium+Python3环境搭建,其实超简单!

appium可以说是做app最火的一个自动化框架&#xff0c;它的主要优势是支持android和ios&#xff0c;另外脚本语言也是支持java和Python。略懂Python&#xff0c;所以接下来的教程是appiumpython&#xff0c;自己搭建环境的时候&#xff0c;按照某些博客安装遇到各种奇葩问题&am…

【新版】系统架构设计师 - 嵌入式技术

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 嵌入式技术考点摘要嵌入式系统嵌入式系统开发与设计交叉开发环境软硬件协同设计嵌入式软件移植低功耗设计 嵌入式硬件嵌入式微处理器人工智能芯片微处理器体系结构 嵌入式操作系统&#xff08;EOS…

大涨39.9%!连续三季度蝉联全球第三,联想服务器做对了什么?

市场调查公司IDC最新发布的2023年第一季度x86服务器全球市场追踪报告显示&#xff0c;联想集团当季实现了39.9%的大幅增长、市场份额连续三季度蝉联全球第三&#xff0c;而全球排名前五厂商中戴尔下降25.1%、HPE微涨0.6%、浪潮下降38.7%、超微&#xff08;Super Micro&#xff…