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

news2024/11/24 7:03:36

效果

在程序启动后,有时不会进入到工作页面,会进入到产品展示页面。
动画如下:

首页展示

页面操作

  • 当不点击时,一秒自动刷新一次;
  • 当点击时,会自动跳转到对应页面;
  • 点击上一页、下一页、及跳转页数,会自动跳转。

UI设计

在这里插入图片描述

示例

注释在代码中,代码可运行。
.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QMap>
#include <QRadioButton>
#include <QButtonGroup>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();


private:
    Ui::MainWindow *ui;
	// 用于管理选择按钮
    QMap<int, QRadioButton*>    m_mapRadios;
    // 加入组
    QButtonGroup*               m_pBtnGroup;
};

#endif // MAINWINDOW_H

.cpp

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

#include <QDebug>
#include <QLabel>
#include <QFont>

#include <QTimer>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    ui->pushButton->setStyleSheet("QPushButton {background-color: #eeeeee; outline: none;}");
    ui->pushButton_2->setStyleSheet("QPushButton {background-color: #eeeeee; outline: none;}");

    m_pBtnGroup = new QButtonGroup(this);

    ui->horizontalLayout->addStretch();
    // 循环创建按钮
    for (int var = 0; var < 5; ++var) {
        QRadioButton* pR = new QRadioButton(QString::number(var+1));
        m_mapRadios.insert(var, pR);

        ui->horizontalLayout->addWidget(pR);
        // 加入组
        m_pBtnGroup->addButton(pR, var);
    }
    ui->horizontalLayout->addStretch();
    // 加入map
    m_mapRadios.value(m_mapRadios.keys().first())->setChecked(true);

    // 循环创建展示界面
    for (int var = 0; var < 5; ++var) {
        // 设置信息
        QLabel* pLabel = new QLabel(this);
        pLabel->setText(QString("第%1页面").arg(var+1));
        pLabel->resize(150, 100);
        QFont font = pLabel->font();
        font.setPointSize(23);
        font.setBold(true);
        pLabel->setFont(font);
        pLabel->setStyleSheet("QLabel{color:#ff0000;}");
        pLabel->move(width()/2, height()/2);
        ui->stackedWidget->insertWidget(ui->stackedWidget->count(), pLabel);
    }
    ui->stackedWidget->setCurrentIndex(0);

    // 根据点击按钮,同步展示页面
    connect(m_pBtnGroup, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), this, [=](int nId){
        ui->stackedWidget->setCurrentIndex(nId);
    });
    // 定时器
    QTimer* pTimer = new QTimer(this);
    connect(pTimer, &QTimer::timeout, this, [=](){
        // 每一秒更新一次
       int nIndex = ui->stackedWidget->currentIndex();
       if(nIndex < 4)
       {
           ui->stackedWidget->setCurrentIndex(nIndex+1);
           m_mapRadios.value(nIndex+1)->setChecked(true);
       }else{
           ui->stackedWidget->setCurrentIndex(0);
           m_mapRadios.value(0)->setChecked(true);
       }
    });

    connect(ui->pushButton, &QPushButton::clicked, this, [=](){
        int nIndex = ui->stackedWidget->currentIndex();
        if(nIndex > 0)
        {
            ui->stackedWidget->setCurrentIndex(nIndex-1);
            m_mapRadios.value(nIndex-1)->setChecked(true);
        }
    });
    connect(ui->pushButton_2, &QPushButton::clicked, this, [=](){
        int nIndex = ui->stackedWidget->currentIndex();
        if(nIndex < 4)
        {
            ui->stackedWidget->setCurrentIndex(nIndex+1);
            m_mapRadios.value(nIndex+1)->setChecked(true);
        }
    });

    pTimer->start(1000);

}

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

结论

可将每页显示的改为产品或者介绍图,实现业务。

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

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

相关文章

安防视频监控/视频融合/云存储EasyCVR页面数据显示不全该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

11.27/28 知识回顾与问题(Django之Web应用与http协议)

一、http有哪些主要版本以及特点 1. 主要版本以及各自特点 HTTP/0.9&#xff1a;最初版本的HTTP协议&#xff0c;只支持GET方法&#xff0c;并且没有请求头和响应头的概念&#xff0c;只能传输纯文本。于1991年发布&#xff0c;由Tim Berners-Lee创建&#xff0c;被认为是HTTP的…

【数据结构复习之路】树和二叉树(严蔚敏版)万字详解主打基础

专栏&#xff1a;数据结构复习之路 复习完上面四章【线性表】【栈和队列】【串】【数组和广义表】&#xff0c;我们接着复习 树和二叉树&#xff0c;这篇文章我写的非常详细且通俗易懂&#xff0c;看完保证会带给你不一样的收获。如果对你有帮助&#xff0c;看在我这么辛苦整理…

RPA机器人如何解决非银企直联网银账户的数据自动采集?

数字时代来临&#xff0c;随着全球信息化水平的不断提升&#xff0c;企业们纷纷向自动化办公、数字化转型靠拢。财务部门作为一个企业的重要部门&#xff0c;承担着管理和监控公司所有项目的重要职责&#xff0c;因而一直被视为企业数字化转型的重要突破口。 由于企业经营理念和…

LeetCode算法题解(动态规划)|LeetCode198. 打家劫舍、LeetCode213. 打家劫舍 II、LeetCode337. 打家劫舍 III

一、LeetCode198. 打家劫舍 题目链接&#xff1a;198. 打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的…

基于Webserver的工业数据采集控制

http协议 http简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写&#xff0c;是用于Web Browser&#xff08;浏览器&#xff09;到Web Server&#xff08;服务器&#xff09;进行数据交互的传输协议。 HTTP是应用层协议 HTTP是一个基于…

“AI+量子模拟”突破!英伟达与美国量子技术公司SandboxAQ合作

&#xff08;图片来源&#xff1a;网络&#xff09; 11月20日&#xff0c;美国量子技术公司SandboxAQ在美国加利福尼亚州帕洛阿尔托宣布与美国人工智能计算公司英伟达&#xff08;NVIDIA&#xff09;联手&#xff0c;双方将通过人工智能和量子模拟技术助力药物发现、电池设计、…

Echarts大屏可视化_01 初始化项目+基本布局

资源、源码来自于B站黑马pink老师 让我们一起来学习吧&#xff01;&#xff01;&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1B7jS-8ZWdYabA9JKqFPpRw 提取码&#xff1a;6666 项目演示视频 1.初始化项目 我们的适配方案选择用flex布局rem单位来做。使用flexible…

汽车电子 -- 车载ADAS之RCW(后碰撞预警系统)

国际标准: RCW&#xff1a; GB 4785-2019 汽车及挂车外部照明和光信号装置的安装规定 一、后方碰撞预警系统 RCW&#xff08; Rear Collision Warning &#xff09; 参看&#xff1a;功能定义-后方碰撞预警 RCW 功能可以对自车行驶过程中对后方车辆进行监测&#xff0c;当…

数据结构校招知识点总结

文章目录 前言1. 数据结构概论、算法设计与分析1.1 数据结构三要素&#xff1f;1.2 算法的基本概念&#xff1f;1.3 什么是时间复杂度&#xff1f; 2. 线性表2.1 链表结构和顺序存储结构的区别&#xff1f;2.2 单链表和双链表的区别&#xff1f;2.3 头指针和头结点的区别&#…

日期对象与节点操作

1.日期对象 1.1实例化 // 实例化const date new Date()console.log(date);// 返回指定时间const date1 new Date(2022-5-1 08:30:00)console.log(date1);1.2日期对象方法 1.3时间戳 三种获取时间戳的方法 const date new Date()console.log(date.getTime());console.log(ne…

java分布式锁分布式锁

java分布式&锁&分布式锁 锁 锁的作用&#xff1a;有限资源的情况下&#xff0c;控制同一时间段&#xff0c;只有某些线程&#xff08;用户/服务器&#xff09;能访问到资源。 锁在java中的实现&#xff1a; synchronized关键字并发包的类 缺点&#xff1a;只对单个的…

vue select选择下拉组织树,解决不出现横向滚动条

背景&#xff1a;由于项目需求需要使用下拉选择框的组织架构树 实现代码如下&#xff1a; <el-row><el-col :span"18"><el-form-item label"所属组织:" prop"groupName"><el-select v-model"dataForm.groupName"…

2023-11-26 LeetCode每日一题(统计子串中的唯一字符)

2023-11-26每日一题 一、题目编号 828. 统计子串中的唯一字符二、题目链接 点击跳转到题目位置 三、题目描述 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符&#xff0c;并返回唯一字符的个数。 例如&#xff1a;s “LEETCODE” &#xff0c;则其…

为什么要坚持每天做公域引流

做公域不一定等于拍视频&#xff0c;真正适合小白的引流方式其实还是做图文内容&#xff0c;比如小红书发帖&#xff0c;知乎问答&#xff0c;微信读书&#xff0c;问一问等。 长期坚持每天做公域引流有以下好处&#xff1a; 提高品牌知名度&#xff1a;每天坚持做公域流量&a…

Docker基本操作---镜像与容器操作

Docker基本操作---镜像与容器操作 1. 操作镜像1.1 查看镜像1.2 删除镜像1.2.1 删除镜像1.2.2 强制删除镜像1.2.3 删除所有镜像 1.3 启动镜像1.4 常见错误1.4.1 image is being used by stopped container e3b9df6dc6ae 2 操作容器2.1 新建启动容器2.2 查看正在运行的容器2.3 退…

Redis缓存设计典型问题

目录 缓存穿透 缓存失效&#xff08;击穿&#xff09; 缓存雪崩 热点缓存key重建优化 缓存与数据库双写不一致 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据…

工业以太网交换机有哪些优点?

工业以太网交换机是一种常见的网络设备&#xff0c;具备工业级特性。在轨道交通、智能制造以及工业自动化控制系统中扮演着重要的角色。随着工业自动化水平不断进步&#xff0c;对工业以太网交换机的要求也日益提高。 工业以太网交换机的工作原理 工业以太网交换机与多种工业…

C# WPF上位机开发(乘法计算小软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上面一篇文章&#xff0c;我们简单了解了怎么用xaml来设计界面。和传统的c# form不一样&#xff0c;它除了可以通过拖拽的方法来实现界面的编写之外…