Qt6入门教程 13:QPushButton

目录

一.QPushButton

1.多选

2.互斥

3.设置菜单

4.图标按钮

4.1给按钮添加图标

4.2异形按钮

二.设置Qt样式表


一.QPushButton

QPushButton是与QAbstractButton最接近的完全体按钮,它具备QAbstractButton的所有特性,并且支持设置菜单。

1.多选

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QHBoxLayout>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow w;w.setWindowTitle("https://blog.csdn.net/caoshangpa");QWidget *centralWidget = new QWidget();QHBoxLayout *hLayout = new QHBoxLayout();QPushButton *button1 = new QPushButton();button1->setText("button1");button1->setCheckable(true);button1->setStyleSheet("QPushButton{""background: rgb(128, 128, 128);""border: 1px solid rgb(50, 50, 50);""color: white;""width: 60px;""height: 30px;}""QPushButton:hover{""background: rgb(150, 150, 150);}""QPushButton:pressed{""background: rgb(100, 100, 100);}""QPushButton:checked{""background: blue;}");QPushButton *button2 = new QPushButton();button2->setText("button2");button2->setCheckable(true);button2->setStyleSheet("QPushButton{""background: rgb(128, 128, 128);""border: 1px solid rgb(50, 50, 50);""color: white;""width: 60px;""height: 30px;}""QPushButton:hover{""background: rgb(150, 150, 150);}""QPushButton:pressed{""background: rgb(100, 100, 100);}""QPushButton:checked{""background: blue;}");QPushButton *button3 = new QPushButton();button3->setText("button3");button3->setCheckable(true);button3->setStyleSheet("QPushButton{""background: rgb(128, 128, 128);""border: 1px solid rgb(50, 50, 50);""color: white;""height: 30px;}""QPushButton:hover{""background: rgb(150, 150, 150);}""QPushButton:pressed{""background: rgb(100, 100, 100);}""QPushButton:checked{""background: blue;}");hLayout->addWidget(button1);hLayout->addWidget(button2);hLayout->addWidget(button3);centralWidget->setLayout(hLayout);w.setCentralWidget(centralWidget);w.resize(400, 200);w.show();return a.exec();
}

QSS

QPushButton{background: rgb(128, 128, 128);border: 1px solid rgb(50, 50, 50);color: white;width: 60px;height: 30px;
}
QPushButton:hover{background: rgb(150, 150, 150);
}
QPushButton:pressed{background: rgb(100, 100, 100);
}
QPushButton:checked{background: blue;
}

2.互斥

只需在“多选”的基础上,对每个按钮设置

button->setAutoExclusive(true);

 

3.设置菜单

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QPainter>
#include <QHBoxLayout>
#include <QMenu>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow w;w.setWindowTitle("https://blog.csdn.net/caoshangpa");QWidget *centralWidget = new QWidget();QHBoxLayout *hLayout = new QHBoxLayout();QPushButton *button1 = new QPushButton();button1->setText("button1");button1->setStyleSheet("QPushButton{""background: rgb(128, 128, 128);""border: 1px solid rgb(50, 50, 50);""color: white;""width: 100px;""height: 30px;""text-align: left center;""padding-left: 10px;}""QPushButton:hover{""background: rgb(150, 150, 150);}""QPushButton:pressed{""background: rgb(100, 100, 100);}""QPushButton:checked{""background: blue;}""QPushButton::menu-indicator{""subcontrol-position: right center;""subcontrol-origin: padding;""right: 10px;}");QMenu *menu = new QMenu();menu->addAction(QString::fromLocal8Bit("Open"));menu->addAction(QString::fromLocal8Bit("Create"));menu->addSeparator();menu->addAction(QString::fromLocal8Bit("Quit"));button1->setMenu(menu);hLayout->addStretch();hLayout->addWidget(button1);hLayout->addStretch();centralWidget->setLayout(hLayout);w.setCentralWidget(centralWidget);w.resize(400, 200);w.show();return a.exec();
}

QSS

QPushButton{background: rgb(128, 128, 128);border: 1px solid rgb(50, 50, 50);color: white;width: 100px;height: 30px;text-align: left center;padding-left: 10px;
}
QPushButton:hover{background: rgb(150, 150, 150);
}
QPushButton:pressed{background: rgb(100, 100, 100);
}
QPushButton:checked{background: blue;
}
QPushButton::menu-indicator{subcontrol-position: right center;subcontrol-origin: padding;right: 10px;
}

如果要使用自定义图标取代默认三角形,QSS如下:

QPushButton::menu-indicator{image: url(:/icons/arrow.png);"subcontrol-position: right center;subcontrol-origin: padding;right: 10px;
}

如果要去掉三角形,QSS如下:

QPushButton::menu-indicator{image: none;"subcontrol-position: right center;subcontrol-origin: padding;right: 10px;
}

4.图标按钮

4.1给按钮添加图标

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QPainter>
#include <QHBoxLayout>
#include <QIcon>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow w;w.setWindowTitle("https://blog.csdn.net/caoshangpa");QWidget *centralWidget = new QWidget();QHBoxLayout *hLayout = new QHBoxLayout();QPushButton *button1 = new QPushButton();button1->setText("button1");button1->setIcon(QIcon(":/icons/AppIcon.png"));button1->setIconSize(QSize(24, 24));button1->setStyleSheet("QPushButton{""background: rgb(128, 128, 128);""border: 1px solid rgb(50, 50, 50);""color: white;""width: 100px;""height: 30px;}""QPushButton:hover{""background: rgb(150, 150, 150);}""QPushButton:pressed{""background: rgb(100, 100, 100);}""QPushButton:checked{""background: blue;}");hLayout->addStretch();hLayout->addWidget(button1);hLayout->addStretch();centralWidget->setLayout(hLayout);w.setCentralWidget(centralWidget);w.resize(400, 200);w.show();return a.exec();
}

QSS

QPushButton{background: rgb(128, 128, 128);border: 1px solid rgb(50, 50, 50);color: white;width: 100px;height: 30px;
}
QPushButton:hover{background: rgb(150, 150, 150);
}
QPushButton:pressed{background: rgb(100, 100, 100);
}
QPushButton:checked{background: blue;
}

4.2异形按钮

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QPainter>
#include <QHBoxLayout>
#include <QIcon>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QMainWindow w;w.setWindowTitle("https://blog.csdn.net/caoshangpa");QWidget *centralWidget = new QWidget();QHBoxLayout *hLayout = new QHBoxLayout();QPushButton *button1 = new QPushButton();button1->setStyleSheet("QPushButton{""border: none;""width: 100px;""height: 100px;""image: url(:/icons/dragon.png);}""QPushButton:pressed{""padding-top: 3px;""padding-left: 3px;""padding-bottom: -3px;""padding-right: -3px}");hLayout->addStretch();hLayout->addWidget(button1);hLayout->addStretch();centralWidget->setLayout(hLayout);w.setCentralWidget(centralWidget);w.resize(400, 200);w.show();return a.exec();
}

QSS

QPushButton{border: none;width: 100px;height: 100px;image: url(:/icons/dragon.png);
}
QPushButton:pressed{padding-top: 3px;padding-left: 3px;padding-bottom: -3px;padding-right: -3px
}

龙头是背景透明的png图片,在QSS中通过设置padding参数实现点击效果。需要注意的是,这种异形按钮并不是真*异形(只有龙头区域能点击)的,因为点击龙头边上的按钮区域,也能产生点击效果。

二.设置Qt样式表

在上面的例子中,我们用了Qt样式表,即QSS(Qt StyleSheet),除了调用控件的setStyleSheet函数来设置Qt样式表,还能在Qt Designer中编辑控件的styleSheet属性,如下图所示:

但是这两种做法都是不推荐的,只能在自己写Demo或做测试的时候使用。正确的做法是把QSS写在后缀为qss的文本文件中。下面是两种加载qss文件的方法:

方法1

QFile file(":/qss/dark.qss");
if (file.open(QFile::ReadOnly)) {QString qss = QLatin1String(file.readAll());qApp->setStyleSheet(qss);file.close();
}

方法2

qApp->setStyleSheet("file:///:/qss/dark.qss");

方法2中这种直接读取qss文件的方式只支持qApp的setStyleSheet函数。
qApp是一个指向QApplication对象的全局指针,因此,别忘了#include <QApplication>

原文链接:Qt6入门教程 13:QPushButton-CSDN博客

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

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

相关文章

2024幻兽帕鲁服务器,阿里云配置

阿里云幻兽帕鲁服务器Palworld服务器推荐4核16G配置&#xff0c;可以选择通用型g7实例或通用算力型u1实例&#xff0c;ECS通用型g7实例4核16G配置价格是502.32元一个月&#xff0c;算力型u1实例4核16G是432.0元/月&#xff0c;经济型e实例是共享型云服务器&#xff0c;价格是32…

docker容器运维命令

文章目录 docker psdocker execdocker inspectdocker topdocker attachdocker waitdocker exportdocker importdocker portdocker cpdocker diffdocker renamedocker statsdocker update总结 docker ps 列出容器。 docker ps [OPTIONS]OPTIONS说明&#xff1a; -a :显示所有的…

Python列表中的append功能及用法举例

Python列表中的append功能及用法举例 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;append()&#x1f333;&#x1f340;功能介绍&#x1f340;&#x1f340;语法&#x1f340;&#x1f340;示例&#x1f340;&#x1f340;注意事项&#x…

总结NB-IoT模块和单片机的区别

在学习了NB-IoT模块后&#xff0c;紧接着又学习了单片机系统&#xff0c;单片机和NB-IoT模块有什么不同之处呢&#xff0c;总结为以下几点。 大纲如图&#xff1a; 一、硬件层面 1、采用芯片不同&#xff0c; &#xff08;1&#xff09;封装&#xff1a;封装尺寸、方式不同&a…

网络原理,网络通信以及网络协议

​​​​&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;网络原理,网络通信以及网络协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 网络原理概念网络通信局域网LAN广域网WAN 网络通信IP地址端口号…

VUE3动漫影视视频网站模板源码

文章目录 1.视频设计来源1.1 主界面1.2 动漫、电视剧、电影视频界面1.3 播放视频界面1.4 娱乐前线新闻界面1.5 关于我们界面 2.效果和源码2.1 动态效果2.2 源码结构 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/deta…

MyBatis概述与MyBatis入门程序

MyBatis概述与MyBatis入门程序 一、MyBatis概述二、入门程序1.准备开发环境&#xff08;1&#xff09;准备数据库&#xff08;2&#xff09;创建一个maven项目 2.编写代码&#xff08;1&#xff09;打包方式和引入依赖&#xff08;2&#xff09;新建mybatis-config.xml配置⽂件…

Web前端开发工具总结

一、nvm&#xff0c;node&#xff0c;npm之间的区别 nodejs&#xff1a;在项目开发时的所需要的代码库。相当于JDK npm&#xff1a;nodejs 包管理工具&#xff0c;npm 可以管理 nodejs 的第三方插件。在安装的 nodejs 的时候&#xff0c;npm 也会跟着一起安装。相当于Maven。 …

Redis学习——高级篇③

Redis学习——高级篇③ Redis7高级之缓存双写一致性之更新策略探讨&#xff08;三&#xff09; 1.缓存双写一致性2.数据库和缓存一致性的几种更新策略2.1 可停机的情况2.2 不可停机的情况,四种更新策略&#xff08;推荐最后一种&#xff0c;看场景&#xff09;1.❌先…

Java8-Stream 流基本应用-groupBy进行分组

groupBy进行分组 Testpublic void testStreamGroupBy(){List<UserInfoModel> resultnew ArrayList<>();for (int i 0; i < 10; i) {UserInfoModel usernew UserInfoModel();user.setUserId(i"");user.setUserName("kangshihang");result.a…

【代码随想录-链表】移除链表元素

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Kafka(九)跨集群数据镜像

目录 1 跨集群镜像的应用场景1.1 区域集群和中心集群1.2 高可用(HA)和灾备(DR)1.3 监管与合规1.4 云迁移1.5 聚合边缘集群的数据 2 多集群架构2.1 星型架构2.2 双活架构2.2 主备架构2.2.1 如何实现Kafka集群的故障转移2.2.1.1 故障转移包括的内容1. 灾难恢复计划2. 非计划内的故…

DELMIAWORKS核心优势深度探析

一&#xff1a;制造BOM从产品结构到制造场景 BOM是所有制造系统的核心&#xff0c;DELMIAWORKS作为专业的制造运营系统&#xff0c;在理解制造BOM方面的能力已经超越了传统系统的范畴。其与传统系统的最大区别在于DELMIAWORKS将焦点放在制造场景的描述上&#xff0c;而非产品结…

259:vue+openlayers: 显示海量多边形数据,10ms加载完成

第259个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中通过WebGLVectorLayerRenderer方式加载海量多边形数据。这里相当于将海量的数据放在同一个层的source中,然后通过webglTile的方式渲染出这一层。 本示例数据为5000个多边形,加载速度超级快。 直接…

数据库性能问题分析优化

客户反应应用频繁卡住&#xff0c;只能通过重启应用才能恢复&#xff0c;一天发生若干次。 问题初步分析处理 从最近得到的三个awr报告看&#xff0c;等待事件基本在于“DB CPU”&#xff0c;“db file sequential read”&#xff0c;“log file sync”&#xff0c;“log fil…

leetcode 26.删除有序数组中的重复项(python版)

需求 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c; 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#x…

浅谈扬州晶澳-年产3GW高性能太阳能光伏组件项目Acrel-3000WEB电能管理系统的设计及应用

摘要&#xff1a;在信息时代&#xff0c;电力信息系统的应用促迚了电力企业的収展&#xff0c;增强了电力系统运行的安全性与稳定性&#xff0c;对满足用户需求其有重要意义。随着国家电网改革政策的逐步推进和落实&#xff0c;Acrel-3000WEB电能管理系统运用互联网和大数据技术…

游戏开发丨基于Pygame的AI版贪吃蛇小游戏

文章目录 写在前面需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于pygame的AI版贪吃蛇小游戏 所需环境 pythonpycharm或anacondapygame 下载地址 https://download.csdn.net/download/m0_68111267/88789665 需求分析 本游戏使用Pygame模块开…

Spark入门01

1 Spark是什么 Spark是用于大规模数据处理的统一分析引擎。对任意类型的数据进行自定义计算。 可以计算&#xff1a;结构化、非结构化&#xff0c;半结构化的数据结构&#xff0c;支持使用Python&#xff0c;Java&#xff0c;Scala、Sql语言开发应用程序计算数据。 计算框架&a…

前端Vue select 下拉框详解以及监听事件

目录 简介 使用详解 演示示例 :key"option.value" :value"option.value" 区别 监听事件 简介 在 Vue 中&#xff0c;下拉框通常通过 <select> 元素与一系列的 <option> 元素来创建。Vue 的数据绑定和指令&#xff08;如 v-model 和 v-for…