Qt6入门教程 13:QPushButton

news2024/10/7 20:27:03

目录

一.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.coloradmin.cn/o/1417934.html

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

相关文章

pytest 8.0 重磅发布!2条弃用规则,7项重大变更,多项优化改进

&#xff08;全文约3200字&#xff0c;阅读约需7分钟&#xff0c;建议先收藏后阅读。首发于公众号&#xff1a;测试开发研习社&#xff0c;欢迎关注&#xff09; pytest 版本遵循 ( <major>.<minor>.<patch>) 语义控制。 昨天发布的 pytest 8.0 是全新的 maj…

使用WAF防御网络上的隐蔽威胁之反序列化攻击

什么是反序列化 反序列化是将数据结构或对象状态从某种格式转换回对象的过程。这种格式通常是二进制流或者字符串&#xff08;如JSON、XML&#xff09;&#xff0c;它是对象序列化&#xff08;即对象转换为可存储或可传输格式&#xff09;的逆过程。 反序列化的安全风险 反序…

外汇天眼:国外汇民遭遇黑平台TO FOREX,损失惨重!

大家都知道&#xff0c;判断外汇平台是否靠谱&#xff0c;并不单单只依靠交易收益情况&#xff0c;而是需要从多方面的情况进行总结&#xff0c;特别是在外汇交易前&#xff0c;就要对外汇平台进行检验&#xff0c;比如检验平台是否有正规监管牌照、口碑评价、资质、创建时间以…

C语言第十二弹--扫雷

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 扫雷 1、扫雷游戏分析和设计 1.1、扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、扫雷游戏的结构分析 2.1、用…

静态分析Golang语言生成函数调用关系的利器——go-callvis

目录 升级go删除旧版本安装新版本配置环境变量载入环境修改当前环境修改之后进入的环境 分析安装go-callvis分析其他包总结 导出文件总结 清晰主体脉络总结 其他 参考资料 不同于之前分析C语言项目的工具&#xff0c;go-callvis还是很方便使用。只要把两项工作做好就能顺利的使…

Android 基础技术——Bitmap

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 Bitmap Bitmap 内存如何计算 占用内存 宽 * 缩放比例 * 高 * 缩放比例 * 每个像素所占字节 缩放比例 设备dpi/图片所在目录的dpi Bitmap加载优化&#xff1f;不改变图片质量的情况下怎么优化&am…

HX711压力传感器学习一(STM32)

目录 原理图&#xff1a;​ 引脚介绍&#xff1a; HX711介绍工作原理: 程序讲解&#xff1a; 整套工程&#xff1a; 发送的代码工程&#xff0c;与博客的不一致&#xff0c;如果编译有报错请按照报错和博客进行修改 原理图&#xff1a; 引脚介绍&#xff1a; VCC和GND引…

Leetcode刷题笔记题解(C++):1117. H2O 生成(多线程)

思路&#xff1a; 解法二&#xff1a;生产者-消费者解法 1.把 hydrogen 线程看作生产者&#xff0c;oxygen 线程看作消费者&#xff0c;缓冲队列大小为2。 2.hydrogen 把生成的氢放入队列&#xff1b;oxygen 线程每次从队列里消费两个氢元素。 3.生产者生产两个氢元素后会因为…

openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题

文章目录 openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题209.1 共享内存泄露问题209.1.1 问题现象209.1.2 原因分析209.1.3 处理方法 openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题 209.1 共享内存泄露问题…

精通Python第20篇—数据之美:用Pyecharts打造引人入胜的多维度仪表盘与图表联动

引言 在数据可视化领域&#xff0c;仪表盘图是一种直观而强大的工具&#xff0c;用于展示关键指标的实时状态。Pyecharts是一个基于Echarts的Python图表库&#xff0c;提供了丰富的图表类型&#xff0c;其中包括了仪表盘图。本文将介绍如何使用Pyecharts绘制多种炫酷的仪表盘图…

05.领域驱动设计:认识领域事件,解耦微服务的关键

目录 1、概述 2、领域事件 2.1 如何识别领域事件 1.微服务内的领域事件 2.微服务之间的领域事件 3、领域事件总体架构 3.1 事件构建和发布 3.2 事件数据持久化 3.3 事件总线 (EventBus) 3.4 消息中间件 3.5 事件接收和处理 4、案例 5、总结 1、概述 在事件风暴&a…

SpringBoot内置工具类

Collections java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合 一、排序 List<Integer> list new ArrayList<>();list.add(2);list.add(1);list.add(3);Collections.sort(list);//升序System.out.println(list);Collections.reverse(…

vue实践:构建高效的电子签名功能

前言 在现代数字化时代&#xff0c;电子签名成为了一种方便、高效且安全的签署文件的方式。本文将介绍电子签名的原理和实现方法&#xff0c;帮助你快速掌握这一重要的工具。 电子签名是什么&#xff1f; 电子签名是一种数字化的签名方式&#xff0c;用于验证和确认电子文档、…

GitLab16.8配置webhooks、Jenkins2.4配置GitLab插件实现持续集成、配置宝塔面板实现持续部署(其三)

看本篇文章的前提是已经部署完GItlab和Jenkins服务器&#xff0c;已经可以手动构建成功&#xff0c;并且经过了很多次实践&#xff0c;对这两款软件基本熟悉。 建议大家按以下顺序看 前端自动化&#xff08;其一&#xff09;部署gitlab 前端自动化&#xff08;其二&#xff0…

第五篇:express路由路径方式(字符串,字符串模式,和正则)

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 引言&#xff1a; &#x1f4…

MYSQL基本查询(CURD:创建、读取、更新、删除)

文章目录 前言一、Create1.全列插入2.指定列插入3.插入否则更新4.替换 二、Retrieve1.SELECT列2.WHERE条件3.结果排序4.筛选分页结果 三、Update四、Delete1.删除数据2.截断表 五、插入查询结果六、聚合函数 前言 操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型…

用友U9 PatchFile.asmx 任意文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

CC攻击类型有几种?有什么有用的防御方法?

CC攻击&#xff08;Challenge Collapsar Attack&#xff09;是一种复杂的网络攻击&#xff0c;它利用了一种分布式拒绝服务攻击工具来发动攻击。这种攻击方式通常由黑客组织或恶意竞争者发起&#xff0c;旨在破坏目标网络或系统的正常运行。 CC攻击的核心在于使用大量的虚假请…

如何选择便捷安全的黄金交易平台?

黄金交易平台的介绍 黄金交易平台是一个提供方便、安全的方式进行黄金交易的网上平台。 投资者可以通过这些平台进行黄金的买卖&#xff0c;参与黄金市场的投资活动。 这些平台提供了一个简单易用的界面&#xff0c;让投资者可以方便地进行交易操作。 选择合适的黄金交易平台…

Kafka-服务端-GroupMetadataManager

GroupMetadataManager是GroupCoordinator中负责管理Consumer Group元数据以及其对应offset信息的组件。 GroupMetadataManager底层使用Offsets Topic,以消息的形式存储Consumer Group的GroupMetadata信息以及其消费的每个分区的offset,如图所示。 consumer_offsets的某Partiti…