利用QPushButton和QButtonGroup实现导航按钮

QPushButton使用教程 QPushButton是 Qt 框架中的一个控件,用于创建按钮。按钮日常开发过程用法(1)基本用来在界面上添加一个按钮,绑定clicked点击信号,槽函数中处理相应的逻辑(2)给按钮绑定一个键盘快捷键,按下此键,进入槽函数处理(3)对按钮设置一个QMenu菜单,右键时弹出按钮样式日常开发用法(1)纯按钮,设置一个背景颜色+文字(2)左侧图标+右侧文字按钮样式(3)按钮的正常、鼠标左键悬浮、鼠标左键按下均设置不同的图片或颜色多个按钮组合用法。 阅读详情

先看看效果:
在这里插入图片描述
利用QButtonGroup实现按钮的互斥选中。

取消选择,和选择第二个(可以通过参数控制选择哪个按钮)

ui文件:
在这里插入图片描述
左侧的按钮都需要设置为Checkable
在这里插入图片描述
或者代码里去设置

//    在ui文件里设置也是一样的效果,ui文件里勾选checkable
    ui->homePushButton->setCheckable(true);
    ui->savePushButton->setCheckable(true);
    ui->printPushButton->setCheckable(true);
    ui->settingPushButton->setCheckable(true);

我把代码都贴出来,注释写得比较清楚,大家看看代码应该清楚。
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QButtonGroup>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    void initButtonGroup();

    void loadqss();

private slots:
    void onButtonClicked(int id);

private:
    Ui::Widget *ui;

    QButtonGroup m_buttonGroup;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QFile>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    initButtonGroup();

    loadqss();

//    在ui文件里设置也是一样的效果,ui文件里勾选checkable
//    ui->homePushButton->setCheckable(true);
//    ui->savePushButton->setCheckable(true);
//    ui->printPushButton->setCheckable(true);
//    ui->settingPushButton->setCheckable(true);


    connect(ui->unSelectedPushButton, &QAbstractButton::clicked, this, [this](){
        QAbstractButton *pCheckedButton = m_buttonGroup.checkedButton();
        if (pCheckedButton != nullptr) //如果没有任何按钮被选中,这里得到的是nullptr,所以要加判断
        {
            //直接设置pCheckedButton->setChecked(false);没有效果,先setExclusive(false),后面再setExclusive(true)才有效
            m_buttonGroup.setExclusive(false);
            pCheckedButton->setChecked(false);
            m_buttonGroup.setExclusive(true);
        }
    });

    //默认选择第二个按钮,你可以把参数传入进去,控制选择第几个按钮
    connect(ui->selectedSecondPushButton, &QAbstractButton::clicked, this, [this](){
        QAbstractButton *pButton = m_buttonGroup.button(1);
        if (pButton != nullptr) //如果你的参数不对,这里得到的是nullptr
        {
            pButton->setChecked(true);
        }
    });

//    以下两种写法都可以,第一种是Qt5中新增的写法,第二种是Qt4中的写法
//    connect(&m_buttonGroup, QOverload<int>::of(&QButtonGroup::buttonClicked), [=](int id){
//        qDebug() << "clicked id: " << id;
//    });

    connect(&m_buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(onButtonClicked(int)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::initButtonGroup()
{
    m_buttonGroup.addButton(ui->homePushButton, 0);
    m_buttonGroup.addButton(ui->savePushButton, 1);
    m_buttonGroup.addButton(ui->printPushButton, 2);
    m_buttonGroup.addButton(ui->settingPushButton, 3);

    m_buttonGroup.setExclusive(true);
}

void Widget::loadqss()
{
    QFile file(":/qss/style.qss");
    file.open(QFile::ReadOnly);
    QByteArray allData = file.readAll();
    this->setStyleSheet(QString(allData));
}

void Widget::onButtonClicked(int id)
{
    qDebug() << "clicked id: " << id;
}

style.qss

QWidget#leftWidget {
    background-color: #3D433E;
}

QPushButton {
    background-color: transparent;
    background-origin: content;
    background-position: top;
    padding-top: 8px;
    background-repeat: no-repeat;
    text-align: bottom;
    padding-bottom: 8px;
    font-family: Microsoft YaHei;
    font-size: 12px;
    color: #979797;
}

QPushButton:checked {
    background-color: #303531;
    background-origin: content;
    background-position: top;
    padding-top: 8px;
    background-repeat: no-repeat;
    text-align: bottom;
    padding-bottom: 8px;
    font-family: Microsoft YaHei;
    font-size: 12px;
    color: #FFFFFF;
}

QPushButton#homePushButton {
    background-image: url(:/images/home_small.png);
}

QPushButton#homePushButton:checked {
    background-image: url(:/images/home_small.png);
}

QPushButton#savePushButton {
    background-image: url(:/images/save_small.png);
}

QPushButton#savePushButton:checked {
    background-image: url(:/images/save_small.png);
}

QPushButton#printPushButton {
    background-image: url(:/images/print_small.png);
}

QPushButton#printPushButton:checked {
    background-image: url(:/images/print_small.png);
}

QPushButton#settingPushButton {
    background-image: url(:/images/setting_small.png);
}

QPushButton#settingPushButton:checked {
background-image: url(:/images/setting_small.png);
}

QPushButton#unSelectedPushButton, QPushButton#selectedSecondPushButton
{
    background: #60C171;
    border: 1px solid #48B978;
    border-radius: 15px;
    font-size: 14px;
    font-family: Microsoft YaHei;
    color: #FFFFFF;
    padding-top: 4px;
    padding-bottom: 5px;
}

关于按钮中的图片和文字的位置的控制,可以查看之前的这篇:
利用QSS自由控制QPushButton中图片和文字的位置

百度网盘:
链接:https://pan.baidu.com/s/14UpoEpYXNCtjst6eIRp2HQ
提取码:dxl8

QButtonGroup的简单应用 <br />QButtonGroup的简单应用<br />所有代码都是在qt3.3.8+fedora8下运行的。<br />QButtonGroup用于统一管理一组QButton按钮。理论上所有继承自QButton的按钮类都可以使用。这里以QPushButton和QRadioButton为例演示。<br />按钮分组的作用主要用在项目选择上,可以单选,也可以多选,根据属性设置而定。<br />头文件: <qbuttongroup.h><br />主要属性和函数:<br />int id:<br />按钮的标 阅读详情

相关推荐

PyQt5 QPushButton组件详解:按钮控件的完整指南

QPushButton是PyQt5中最基础且最常用的按钮控件,它提供了一个可点击的按钮,用于触发各种用户操作。作为GUI应用程序中的核心交互组件,QPushButton广泛应用于表单提交、功能触发、对话框确认等场景。本文将从基础概念开始,由浅入深地详细介绍QPushButton的各个方面。QPushButton是PyQt5.QtWidgets模块中的一个按钮控件,它继承自QAbstractButton,提供了丰富的按钮交互功能。QPushButton是用户与应用程序交互的主要方式之一。import sys。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1019

QButtonGroup互斥按钮(QPushButton)

QButtonGroup类提供一个容器来放置按钮部件,如QPushButton、QCheckBox和QRadioButton等三种部件。一般对于有多个按钮并且要求同一时间只有一个按钮被选中的情况下,使用QButtonGroup最方便(如果对标题有要求可以使用QGroupBox类),其中QCheckBox和QRadioButton有小对勾和小圆点,在setExclusive(true)下效果很明显,...

虾米小小小的博客 5666

Qt按钮控件深度解析:从QPushButton到自定义绘制的GUI开发实战

在图形用户界面(GUI)开发中,控件是构建交互体验的基础单元,其核心原理在于事件处理与状态管理。Qt框架通过信号与槽机制实现了控件间的高效通信,而样式系统则提供了灵活的外观定制能力。这些技术的价值在于能够帮助开发者构建响应迅速、视觉统一且易于维护的跨平台应用程序。在桌面软件、嵌入式界面等应用场景中,按钮作为最频繁使用的交互控件,其实现质量直接影响用户体验。本文聚焦于Qt按钮控件家族,深入探讨了QPushButton、QRadioButton等核心组件的信号槽高级用法、样式表(QSS)定制以及通过重写pain

weixin_30706691的博客 348

QT控件之QButtonGroup的使用(按钮组)

【代码】QT控件之QButtonGroup的使用(按钮组)

Littlehero_121的博客 1923

Qt按钮控件深度解析:从基础使用到高级定制与性能优化

在图形用户界面(GUI)开发中,按钮作为最基础的交互控件,其设计与实现直接影响用户体验和程序健壮性。从概念上讲,按钮是用户与程序进行瞬时或状态交互的桥梁,其核心原理在于事件驱动模型——通过信号与槽机制响应用户操作。在Qt框架中,这一原理被具体化为QAbstractButton及其子类(如QPushButton、QToolButton等),它们不仅封装了点击检测、状态管理(如按下、悬停、禁用)等底层逻辑,还提供了丰富的可定制性。技术价值上,合理运用按钮控件能提升界面直观性、操作流畅性和代码可维护性。应用场景广

weixin_34150830的博客 421

Qt GUI开发入门:从环境搭建到界面设计实战指南

GUI(图形用户界面)开发是软件工程中的重要领域,它通过可视化组件实现用户与程序的交互。其核心原理在于事件驱动模型,即用户操作触发事件,程序通过事件处理机制响应。这一技术价值在于极大提升了软件易用性和用户体验,广泛应用于桌面应用、嵌入式系统、工业控制等场景。在众多GUI框架中,Qt以其跨平台特性和强大的信号与槽机制脱颖而出,成为C++开发者的首选。本文聚焦Qt框架,详细解析其核心机制——信号与槽,并通过构建计算器界面等实战案例,系统介绍环境搭建、控件使用、布局管理及样式美化等关键技能,帮助开发者快速掌握这一

weixin_30667649的博客 407

Qt QPushButton 实战:点击、切换、分组功能

Qt QPushButton 的几种常见用法

Mingyueruya的专栏 1152

QT中QButtonGroup的使用

一、QButtonGroup 简介 QButtonGroup 继承自 QObject,不是一个可视类,它主要是对按键进行分组,便于按键管理。 二、QButtonGroup 样例 mainwindows.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QButtonGroup> #include <QVBoxLayout> class MainWindow : pub

啊渊的专栏 5868

【Qt】QStackedWidget、QRadioButton、QPushButton及布局实现程序首页自动展示功能

【Qt】QStackedWidget、QRadioButton、QPushButton及布局实现程序首页自动展示功能

FreeLikeTheWind的博客 1041

Qt代码-按钮组导航栏样式大全代码

QStringList buttons = {"首页", "文件", "编辑", "视图", "工具", "帮助"};QStringList buttons = {"首页", "新闻", "产品", "关于我们", "联系我们"};QStringList buttons = {"主页", "音乐", "视频", "图片", "文档"};{"设置", ":/icons/settings.png"},

寒寒豆豆软件公司的博客 119

PyQt5 按钮组件详细讲解示例(附源码)

项目概述这是一个基于 PyQt5 的图形用户界面演示程序,专门用于展示和教学 PyQt5 中各种按钮组件的使用方法、特性和功能。程序功能演示多种 PyQt5 按钮组件实时显示按钮操作反馈提供详细的组件说明文档支持样式自定义演示技术架构开发环境编程语言: Python 3.xGUI框架: PyQt5操作系统: 跨平台 (Windows/macOS/Linux)核心依赖python类结构设计主类: ButtonDemo。

ybmzlqzj的博客 75

Qt基础控件学习07 水平导航栏

模仿富途做一个水平导航栏。原理就是在QButtonGroup中加入QPushbutton,加上一定的动画和样式。 代码如下: .h #ifndef CHORIZONTALNAVBAR_H #define CHORIZONTALNAVBAR_H /*************************************/ /**功能:水平导航栏 ...

qq_22328661的博客 1415

国密套件ECC-SM2-SM4-CBC-SM3和ECDHE-SM2-WITH-SM4-SM3

双方交换各自的公钥,最后A计算点(x1,y1) = d1Q2,B计算点(x2,y2) = d2Q1,由于椭圆曲线上是可以满足乘法交换和结合律,所以 d1Q2 = d1d2G = d2d1G = d2Q1 ,因此双方的 x 坐标是一样的,所以它是共享密钥,也就是会话密钥。4、客户端和服务端分别使用工作密钥,计算主密钥,客户端随机数,服务端随机数,字符串常量"key expansion",经PRF计算生成工作密钥。工作密钥包括加密密钥和校验密钥,具体密钥长度由选择的密码算法决定。客户端支持的压缩算法列表。

Java学习笔记 3783

我用PyQt5手搓了一款小米车机软件系统(详细图文说明)

本文介绍了基于PyQt5开发的仿小米风格车机系统项目,涵盖技术实现与设计思路。项目采用PyQt5框架结合QSS样式、QThread多线程、QRC资源管理等技术,实现了模块化多页面架构、主题切换、自定义控件等功能。系统包含主界面(集成车辆信息、导航、媒体控制)、APP应用页(支持滑动切换)和空调控制页(3D可视化交互),通过深色/浅色主题切换优化用户体验。文章详细阐述了技术选型理由、界面设计理念及开发中的挑战与解决方案,为Python GUI开发与智能座舱系统设计提供了实践参考,展示了PyQt5在复杂桌面应用

懷淰メ的博客 434

AI产品经理必备:Agent评测维度、指标与工程化落地指南

随着大模型从单轮问答走向复杂的Agent应用,如何科学地评测一个Agent是否真正“办成了事”,成为AI产品经理必须掌握的核心能力。与传统大模型评测关注回答质量不同,Agent评测需要综合评估任务规划、工具调用、多轮对话一致性以及失败自愈等行为。任务完成率与工具调用成功率是最关键的两个量化指标,同时还需关注延迟与Token成本等工程约束。在实际落地中,评测集的设计要覆盖业务主流程与边界场景,并通过批量回归测试与版本对比,为产品选型、算法迭代和上线决策提供数据支持。本文系统拆解了Agent评测的完整流程,帮助

weixin_29057163的博客 344

LoRaWAN协议-物理层(PHY)详解

目录 1 前言 2 物理层包格式 2.1 LoRa调制 2.2 FSK调制 2.3 LR-FHSS 3 Uplink 4 Downlink 1 前言 如图所示,LoRaWAN是一种开放式网络协议,可提供由LoRa联盟标准化和维护的安全双向通信,移动性和本地化服务。该协议做为MAC层,属于数据链路层。其物理层(PHY)实现与其他设备的通信,目前物理层支持LoRa,FSK,LR-FHSS调制。 下图的PHY只标准了LoRa调制,是因为LoRaWAN实际应用中基...

只想.静静的博客 8773

工作日志记录

记录工作中细碎的感悟和经验,持续补充中。

WSTONECH的博客 497

基于Arduino与脑电模块的意念控制LED灯环实现

脑机接口(BCI)技术通过采集和处理脑电信号,实现人脑与外部设备的直接交互。其核心原理是利用传感器捕捉大脑活动产生的微弱电信号,经过放大、滤波和特征提取,转换为可识别的指令。这项技术在医疗康复、神经反馈训练和人机交互等领域具有重要价值。本文聚焦于一个具体的工程实践:使用消费级NeuroSky TGAM模块采集专注度与放松度数据,通过Arduino平台解析信号,并驱动WS2812B LED灯环实现实时可视化反馈。项目涵盖了硬件选型、电路搭建、数据解析和光效映射等关键环节,为脑机接口入门和嵌入式开发提供了完整的

weixin_28721917的博客 280

QButtonGroup 实现QPushButton 互斥管理

/* QButtonGroup 实现QPushButton 互斥管理, 一个按钮按下,其它按钮会被自动弹起, 按下的按钮用背景标蓝表示 * 功能简单,逻辑请看注释,直接上代码了. */ #include <QtGui> QString but_style=QString("\ QPushButton:checked { /*按钮被选择时*/\ background-color:blue;\ }"); int main(int argc, char *ar...

hjjdebug的专栏 1852

第八章 MobileNetv3网络详解

本文介绍了基于互补的搜索技术和新颖的架构设计的MobileNets的下一代。MobileNetV3通过硬件感知网络架构搜索(NAS)和NetAdapt算法相结合,针对移动电话CPU进行优化,随后通过新颖的架构改进技术进行了进一步提高。本文开始探索自动化搜索算法和网络设计如何相互协作,以利用互补的方法改进整体技术水平。通过此过程,我们创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用情况。

ADICDFHL的博客 1万+

RK3588平台开发系列讲解(项目篇)常见模型结构

📢 AI 模型常采用人工神经网络来模拟人脑神经的记忆和处理信号的能力。常见的人工神经网络类型有深度神经网络(Deep Neural Network,DNN)、卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)等。

内核笔记 1758

qt -- QPushButton、QToolButton、QCheckBox、QRadioButton、QButtonGroup

1、QPushButton 普通按钮,可以提供文字,图标都在按钮上。可以设置一定的界面风格。 2、QToolButton QToolButton类提供了一个快速访问命令或选项的按钮,通常在QToolBar中使用。工具按钮是一种特殊的按钮,提供对特定命令或选项的快速访问。与普通的命令按钮不同,工具按钮通常不显示文字,而是显示一个图标。 此按钮功能比QPushButton多。 3、QCheckBox 4、QRadioButton 带有文本标签的单选按钮。 一个可以切换选中...

ccr的博客 896

【AVRCP】规范精讲[19]: 媒体属性全解析,让你的蓝牙设备显示完整歌曲信息

AVRCP协议中的媒体属性是蓝牙音频设备传输歌曲元数据的关键,包含标题、艺术家、专辑等32位ID标识的键值对信息。规范要求字符串属性必须使用UTF-8编码,但乱码问题频发(如中文显示异常),主因是设备未遵循编码标准或使用GBK等非规范格式。常见问题包括信息不全(仅显示标题)、封面缺失(因带宽限制或格式不支持)及更新延迟(通知机制未启用)。解决方案包括强制UTF-8编码、优化封面大小(如300x300像素JPEG)、主动请求缺失属性。Android示例代码展示了通过广播接收器解析媒体属性的方法。

byte轻骑兵的技术小窝 1万+

Qt:9.按钮类控件介绍和使用(QPushButton-普通按钮、QRadioButtion-单选按钮、QCheckBox-复选按钮、QButtonGroup类-管理一组按钮)

QPushButton 是最常见的按钮控件,表示一个可以点击的按钮。它里面可以显示文本、图标或两者,并支持各种信号和槽机制来响应用户的操作。QRadioButton 是一个用于创建单选按钮的类。单选按钮允许用户从一组选项中选择一个选项。拖拽出来的多个 QRadioButton 控件默认情况下是互斥的。QCheckBox 是 Qt 框架中用于创建复选框控件的类。复选框允许用户选择或取消选择一个或多个独立的选项。 QButtonGroup 类用于管理一组按钮,并确保它们之间的互斥性。

weixin_63716012的博客 1619

风光互补制氢系统动态仿真建模与性能分析

摘要 本文针对离网型风光互补制氢系统,建立了包含光伏阵列、风力发电机、PEM电解槽、储能电池和储氢罐的完整动态数学模型。基于MATLAB/Simulink平台开发了模块化仿真框架,设计了考虑电解槽最小运行功率约束的能量管理策略。通过典型日仿真分析表明,风光互补可有效平抑单一能源的功率波动,系统整体能量效率达58.7%,电解槽负荷跟随特性良好。提出的动态仿真方法为风光制氢系统的优化设计和运行控制提供了有效工具。 关键词:风光互补制氢;PEM电解槽;动态仿真;MATLAB/Simulink;能量管理

huanghm88的专栏 77

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Python】pyqt5-----QPushButton、QCommandLinkBut​​ton、QToolButton、QRadioButton、QButtonGroup、QCheckBox

QPushButton继承于QAbstractButton。 创建按钮控件 QPushButton(parent) 创建控件的同时, 设置父控件。 QPushButton(text, parent) 创建控件的同时, 设置提示文本和父控件。 QPushButton(icon, text, parent) 创建控件的同时, 设置图标, 提示文本和父控件。 菜单相关 setMenu(QMenu) 设置菜单。 menu() 获取菜单。 showMenu()

CNSamRol的博客 1399

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 利用QSS自由控制QPushButton中图片和文字的位置
下一篇: 利用qss设置QTextEdit背景颜色(背景透明)不生效的解决方法
hp_cpp
博客等级 码龄11年 310粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值