在Qt工具栏上实现矩阵并排的按钮效果源码

news2024/11/17 18:24:43

如果这个要用MFC去实现头皮都得掉一层,建议大家以后要写GUI方面的小工具尽量转QT或其他吧,MFC真不适合搞这种花里胡哨的界面.

在Qt工具栏上实现矩阵并排的按钮效果源码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QGridLayout>
#include <QPushButton>

class QxBtnMatrix : public QWidget {
public:
    QxBtnMatrix (QWidget *parent = nullptr) : QWidget(parent) {
        QGridLayout *layout = new QGridLayout(this);

        // 添加上排矩阵按钮
        for (int i = 0; i < 4; ++i)
        {
            QPushButton *button = new QPushButton(QString("A%1").arg(i + 1));
            layout->addWidget(button, 0, i);
            m_lstTypeA.push_back(button);
            connect(button, &QPushButton::clicked, this, &QxBtnMatrix::OnClickTypeA);
        }

        // 添加下排矩阵按钮
        for (int i = 0; i < 4; ++i)
        {
            QPushButton *button = new QPushButton(QString("B%1").arg(i + 1));
            layout->addWidget(button, 1, i);
            m_lstTypeB.push_back(button);
            connect(button, &QPushButton::clicked, this, &QxBtnMatrix::OnClickTypeB);
        }

        // 设置布局间距和按钮大小
        layout->setSpacing(2); // 设置按钮之间的间距
        layout->setContentsMargins(1, 1, 1, 1); // 设置边距

        // 调整按钮大小
        QList<QPushButton *> buttons = findChildren<QPushButton *>();
        for (QPushButton *button : buttons) {
            button->setFixedSize(24, 16); // 设置按钮固定大小
            button->setStyleSheet("QPushButton {"
                          "border: 2px solid #8f8f91;"
                          "border-radius: 6px;"
                          "min-width: 24px;"
                          "background-color: #f6f7fa;"
                          "}"
                          "QPushButton:pressed {"
                          "background-color: #dadbde;"
                          "}");
        }
    }


private slots:
    void OnClickTypeA()
    {
        QPushButton *clickedBtn = qobject_cast<QPushButton  *>(sender());
        if(!clickedBtn)
            return;

        for(QPushButton *btn : m_lstTypeA)
        {
            if(btn != clickedBtn)
            {
                btn->setStyleSheet("QPushButton {"
                          "border: 2px solid #8f8f91;"
                          "border-radius: 6px;"
                          "min-width: 24px;"
                          "background-color: #f6f7fa;"
                          "}"
                          "QPushButton:pressed {"
                          "background-color: #dadbde;"
                          "}");
            }
            else
            {
                btn->setStyleSheet("QPushButton {"
                          "border: 2px solid #8f8f91;"
                          "border-radius: 6px;"
                          "min-width: 24px;"
                          "background-color: #ff0000;"
                          "}"
                          "QPushButton:pressed {"
                          "background-color: #ff0000;"
                          "}");
            }
        }
    }

    void OnClickTypeB()
    {
        QPushButton *clickedBtn = qobject_cast<QPushButton  *>(sender());
        if(!clickedBtn)
            return;

        for(QPushButton *btn : m_lstTypeB)
        {
            if(btn != clickedBtn)
            {
                btn->setStyleSheet("QPushButton {"
                          "border: 2px solid #8f8f91;"
                          "border-radius: 6px;"
                          "min-width: 24px;"
                          "background-color: #f6f7fa;"
                          "}"
                          "QPushButton:pressed {"
                          "background-color: #dadbde;"
                          "}");
            }
            else
            {
                btn->setStyleSheet("QPushButton {"
                          "border: 2px solid #8f8f91;"
                          "border-radius: 6px;"
                          "min-width: 24px;"
                          "background-color: #ff0000;"
                          "}"
                          "QPushButton:pressed {"
                          "background-color: #ff0000;"
                          "}");
            }
        }
    }

public:
    QList<QPushButton *>    m_lstTypeA, m_lstTypeB;
};


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

    // 创建按钮矩阵小部件
    QxBtnMatrix *btnMatrix = new QxBtnMatrix(this);

    // 将按钮矩阵小部件添加到工具栏中
    ui->toolBar->addSeparator();
    ui->toolBar->addWidget(btnMatrix);
    ui->toolBar->addSeparator();

    // 添加打开
    ui->toolBar->addAction(ui->actionOpen);
}

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

运行后的效果如下图:

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

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

相关文章

即插即用篇 | YOLOv8 引入 Strip Pooling | 重新思考场景解析的空间池化

本改进已集成到 YOLOv8-Magic 框架。 空间池化已被证明在捕获像素级预测任务的长距离上下文信息方面非常有效,如场景解析。在本文中,我们超越了通常具有N N规则形状的常规空间池化,重新思考空间池化的构成,引入了一种新的池化策略,称为条带池化,它考虑了一个长而窄的核,…

基于 docker-compose 部署 LNMP 架构

目录 前言 1、任务要求 2、Nginx 2.1 建立工作目录并上传相关安装包 2.2 编写 Nginx Dockerfile 脚本 2.3 准备 nginx.conf 配置文件 3、Mysql 3.1 建立工作目录并上传相关安装包 3.2 编写 Mysql Dockerfile 脚本 3.3 编写 my.cnf 配置文件 4、PHP 4.1 建立工作目录…

AIGC时代重塑数字安全风控体系

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

Lombok介绍、使用方法和安装

目录 1 Lombok背景介绍 2 Lombok使用方法 2.1 Data 2.2 Getter/Setter 2.3 NonNull 2.4 Cleanup 2.5 EqualsAndHashCode 2.6 ToString 2.7 NoArgsConstructor, RequiredArgsConstructor and AllArgsConstructor 3 Lombok工作原理分析 4. Lombok的优缺点 5. 总结 1 …

网络匿名--不只是TOR

今天&#xff0c;我们将讨论互联网匿名和隐私&#xff1a; 如何隐藏你的真实身份。 什么是 TOR 。 如何以完全匿名的方式执行黑客任务。 如何使用proxy chain。 如何让我们的匿名性领先一步。 如何使用特定的操作系统保持匿名。 结论&#xff0c;如何实现互联网匿名和隐…

Nginx或Tengine服务器配置SSL证书

目录 前提条件 步骤一&#xff1a;下载SSL证书 步骤二&#xff1a;在Nginx服务器安装证书 步骤三&#xff1a;验证SSL证书是否配置成功 前提条件 已通过数字证书管理服务控制台签发证书SSL证书绑定的域名已完成DNS解析&#xff0c;即您的域名与主机IP地址相互映射已在Web服…

python自动化办公的代码

以下是一个简单的Python自动化办公代码示例&#xff0c;用于实现一些基本的自动化任务&#xff0c;例如打开文件、读取数据、写入数据和保存文件等。 python import os # 打开文件 def open_file(filename): try: file open(filename, r) data file.read() file.close() ret…

【SpringBoot记录】自动配置原理(3):自动配置注解

前言 如果对注解有不太了解的&#xff0c;先行了解注解。这里做个简单的说明&#xff0c;个人理解注解就是对类、接口、方法、属性等添加一个标识&#xff0c;这些标识可以被编译器、开发工具或运行时环境识别&#xff0c;识别后即可在不改变原业务逻辑的情况下进行一些特定的…

记录一次接口优化的过程。接口响应时间从500s下降到5s。

记录一次接口优化的过程。接口响应时间从500s下降到5s。 接口说明&#xff1a; 该接口通过用户导入的一年内每天的厂区用电功率数据来计算用户安装储能设备后的收益情况。 用电功率数据具体为每15分钟一条&#xff0c;一年约有 12*30*24*4 34560 条。 代码循环情况为&…

python实现pip一键切换国内镜像源脚本分享

本文主要分享一个自己写的pip一键切换国内镜像源python脚本 import subprocess# pip 国内镜像源加速 source_urls [{"name": "默认镜像源", "url": ""},{"name": "清华大学镜像源(推荐使用)", "url": …

CLIP 浅析

CLIP 浅析 文章目录 CLIP 浅析概述如何训练CLIP如何使用Clip进行图像分类优缺点分析优点缺点 概述 CLIP的英文全称是Contrastive Language-Image Pre-training&#xff0c;即一种基于对比文本-图像对的预训练方法或者模型。 如何训练CLIP CLIP包括两个模型&#xff1a;Text …

用友畅捷通T+ keyEdit sql注入漏洞

产品介绍 畅捷通 T 是一款灵动&#xff0c;智慧&#xff0c;时尚的基于互联网时代开发的管理软件&#xff0c;主要针对中小型工贸与商贸企业&#xff0c;尤其适合有异地多组织机构&#xff08;多工厂&#xff0c;多仓库&#xff0c;多办事处&#xff0c;多经销商&#xff09;的…

java--io流(二)

一、打印流&#xff08;PrintStream[字节]、PrintWriter[字符]&#xff09; &#xff08;基本上可以代替前面所学的字节、字符输出流&#xff09;&#xff0c;二者关于打印数据功能相同&#xff08;都方便且高效&#xff09;&#xff0c;但是关于数据写出不同&#xff0c;前者…

数字孪生引擎国产信创环境适配靠谱么?

近期我们组织了一次国产化环境适配以及产品国产化产品替换的交流&#xff0c;虽然从属于不同的业务条线&#xff0c;但是在过去一段时间多多少少都承受不同程度的信创压力&#xff0c;尤其是自然资源业务方面&#xff0c;由于自然资源大多数的业务是属于强GIS的范畴&#xff0c…

未来娱乐新地标?气膜球幕影院的多维体验—轻空间

在中国&#xff0c;一座独特的娱乐场所正在崭露头角&#xff1a;气膜球幕影院。这个融合了气膜建筑与激光投影技术的创新场所&#xff0c;不仅令人惊叹&#xff0c;更带来了前所未有的科幻娱乐体验。让我们一起探索这个未来的娱乐空间&#xff0c;感受其中的多维魅力。 现场演出…

电脑复制和粘贴的时候会出现Hello!

电脑不管是Microsoft Excel还是Microsoft Word复制之后粘贴过来就出现HELLO&#xff0c;当复制粘贴文件的时候就会出现WINFILE&#xff1b; 具体现象看下面两个图片&#xff1a; 这是因为winfile 文件病毒&#xff08;幽灵蠕虫病毒&#xff09;,每月的28号发作&#xff1b; 症状…

基础I/O:文件系统调用接口

文章目录 文件系统调用接口open系统调用接口和C语言封装文件描述符fd重定向 文件系统调用接口 open NAME//打开、创建 - 打开并可能创建文件或设备open, creat - open and possibly create a file or deviceSYNOPSIS#include <sys/types.h>#include <sys/stat.h>…

【数据结构】顺序表与链表的差异

顺序表和链表都是线性表&#xff0c;它们有着相似的部分&#xff0c;但是同时也有着很大的差异。 存储空间上的差异&#xff1a; 对于插入上的不同点&#xff0c;顺序表在空间不够时需要扩容&#xff0c;而如果在使用realloc函数去扩容&#xff0c;会有原地扩容和异地扩容两种情…

DDS块集是如何工作的?

DDS块集使你能够在Simulink中创建DDS应用程序。如果你有一个在Simulink中建模的应用程序&#xff0c;希望能够使用DDS&#xff0c;则可以使用DDS块集轻松连接到DDS中间件平台。 DDS块集将DDS概念引入Simulink环境&#xff0c;在Simulink应用程序中对这些概念进行建模&#xff0…

Failed to parse source map (@toast-ui/editor/dist/purify.js.map)

使用 toast-ui-editor 时出现报错&#xff1a;Failed to parse source map (toast-ui/editor/dist/purify.js.map) 解决方法很简单&#xff1a; "start": "set "GENERATE_SOURCEMAPfalse" && react-scripts start ",在启动脚本时添加执…