QT写一个mainWindow

切换风格的写法:

先看看样式效果:

mian_window.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();void InitMenu();void InitToolBar();
private:void SetStyleSheetToolBar();void InitFile();
private:QTabWidget *toolTablWidget_ {nullptr};
};
#endif // MAINWINDOW_H

cpp 文件

#include "mainwindow.h"#include <QApplication>
#include <QMainWindow>
#include <QTabWidget>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>
#include <QStackedWidget>
#include <QScreen>
#include <QGuiApplication>
#include <QMenuBar>
#include "file_widget.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 创建中央窗口部件QWidget *centralWidget = new QWidget(this);setCentralWidget(centralWidget);InitToolBar();InitMenu();// 设置布局QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);mainLayout->addWidget(toolTablWidget_);mainLayout->addWidget(new QWidget);mainLayout->addStretch();centralWidget->setLayout(mainLayout);// 设置窗口标题setWindowTitle("默认选项卡的 QMainWindow");
}MainWindow::~MainWindow() {}void MainWindow::InitMenu()
{// 创建菜单栏QMenuBar *menuBar = new QMenuBar(this);setMenuBar(menuBar);// 添加“文件”菜单QMenu *fileMenu = new QMenu("文件", this);menuBar->addMenu(fileMenu);fileMenu->addAction("新建");fileMenu->addAction("打开");fileMenu->addAction("保存");fileMenu->addSeparator();QAction *exitAction = fileMenu->addAction("退出");connect(exitAction, &QAction::triggered, this, &QMainWindow::close);// 添加“视图”菜单QMenu *viewMenu = new QMenu("视图", this);menuBar->addMenu(viewMenu);viewMenu->addAction("放大");viewMenu->addAction("缩小");// 添加“帮助”菜单QMenu *helpMenu = new QMenu("帮助", this);menuBar->addMenu(helpMenu);helpMenu->addAction("关于");helpMenu->addAction("帮助");
}void MainWindow::InitToolBar()
{// 获取屏幕高度QScreen *screen = QGuiApplication::primaryScreen();int screenHeight = screen->size().height();int tabWidgetHeight = screenHeight / 7; // 设置 tabWidget 高度为屏幕高度的八分之一// 创建 QTabWidgettoolTablWidget_ = new QTabWidget(this);toolTablWidget_->setFixedHeight(tabWidgetHeight);SetStyleSheetToolBar();// 添加选项卡到 QTabWidget,并设置文本toolTablWidget_->addTab(new QWidget(), "选项卡 1");toolTablWidget_->addTab(new QWidget(), "选项卡 2");toolTablWidget_->addTab(new QWidget(), "选项卡 3");toolTablWidget_->addTab(new QWidget(), "选项卡 4");toolTablWidget_->addTab(new QWidget(), "选项卡 5");InitFile();
}void MainWindow::SetStyleSheetToolBar()
{QString styleSheet = R"(QMainWindow {background-color: #f0f0f0; /* 设置背景颜色为浅灰色 */
}QTabWidget::pane {border: none;background: transparent;
}QTabBar::tab {background: rgba(255, 255, 255, 180); /* 半透明背景 */width: 120px; /* 设置页签宽度为120px */height: 22px;margin-right: 5px; /* 页签之间的间距 */margin-bottom: 10px; /* 页签与页面之间的距离 */
}QTabBar::tab:selected {background: rgba(255, 255, 200, 0); /* 选中的页签背景为不透明白色 */
}QTabWidget > QWidget > QWidget  {border: none;border-right: 0px solid gray; /* 右边框 */border-bottom: 0px solid gray; /* 下边框 */border-radius: 16px 16px 16px 16px; /* 下方圆角 */background: rgba(255, 255, 255, 255); /* 半透明背景 */margin-top: 0px; /* 将页面向上移动1像素,以隐藏面板边框 */
}QGroupBox {border: 1px solid  #C0C0C0; /* 边框颜色 */border-radius: 10px; /* 设置圆角为5像素 */background: rgba(255, 255, 255, 180); /* 半透明背景 */padding: 5px; /* 内边距 */margin-bottom: 2px; /* 为了确保标题在外部下方居中 */margin-top: 0px; /* 为了确保标题在外部下方居中 */
}QGroupBox::title {subcontrol-origin: padding;subcontrol-position: bottom center; /* 标题文字在下方居中 */padding: 0 10px;background: transparent;color: black;
})";this->setStyleSheet(styleSheet);
}void MainWindow::InitFile()
{PageFileWidget * pageFile = new PageFileWidget(toolTablWidget_->widget(0));pageFile->Init();
}

下面向日葵所在的分文件:

#ifndef FILE_WIDGET_H
#define FILE_WIDGET_H#include <QWidget>class PageFileWidget : public QWidget {Q_OBJECT
public:explicit PageFileWidget(QWidget *parent = nullptr);void Init();
private:void setupUI();
};#endif // FILE_WIDGET_H#include "file_widget.h"
#include <QGridLayout>
#include <QPushButton>
#include <QIcon>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QComboBox>
#include <QGroupBox>
#include <QToolButton>namespace {
const int TOOLBUTTON_WIDTH = 40;
const int TOOLBUTTON_HEIGHT = 40;
}
PageFileWidget::PageFileWidget(QWidget *parent) : QWidget(parent) {}void PageFileWidget::Init()
{setupUI();
}void PageFileWidget::setupUI() {QHBoxLayout *hbox = new QHBoxLayout(this);QGridLayout *gridLayout = new QGridLayout(this);// 设置边距(上下左右均为5px)gridLayout->setContentsMargins(1,1,1,1);QGridLayout *gridLayoutfile = new QGridLayout(this);gridLayoutfile->setContentsMargins(5, 5, 5, 5);QGroupBox *fileGroup = new QGroupBox("File", this);QGroupBox *fileConstruct = new QGroupBox("construct", this);// QString styleSheet = R"(// )";
//     fileGroup->setStyleSheet(styleSheet);
//     fileConstruct->setStyleSheet(styleSheet);// 添加按钮和标签,模拟 PowerPoint 界面QToolButton *button1 = new QToolButton(this);button1->setText("Button Text");  // 设置按钮的文字button1->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button1->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)QToolButton *button2 = new QToolButton(this);button2->setText("Button Text");  // 设置按钮的文字button2->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button2->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)QToolButton *button3 = new QToolButton(this);button3->setText("Button Text");  // 设置按钮的文字button3->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button3->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)QToolButton *button4 = new QToolButton(this);button4->setText("Button Text");  // 设置按钮的文字button4->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button4->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)QToolButton *button5 = new QToolButton(this);button5->setText("Button Text");  // 设置按钮的文字button5->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button5->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)QToolButton *button6 = new QToolButton(this);button6->setText("Button Text");  // 设置按钮的文字button6->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button6->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)QToolButton *button7 = new QToolButton(this);button7->setText("Button Text");  // 设置按钮的文字button7->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button7->setIconSize(QSize(32, 32));  // 设置图标的大小(可选)QToolButton *button8 = new QToolButton(this);button8->setText("Button Text");  // 设置按钮的文字button8->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button8->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)QToolButton *button9 = new QToolButton(this);button9->setText("Button Text");  // 设置按钮的文字button9->setIcon(QIcon(":/icons/1.png"));  // 设置按钮的图标button9->setIconSize(QSize(TOOLBUTTON_WIDTH, TOOLBUTTON_HEIGHT));  // 设置图标的大小(可选)gridLayout->addWidget(button1, 0, 0);gridLayout->addWidget(button2, 0, 1);gridLayout->addWidget(button3, 0, 2);gridLayout->addWidget(button4, 0, 3);gridLayoutfile->addWidget(button5, 0, 0);gridLayoutfile->addWidget(button6, 0, 1);gridLayoutfile->addWidget(button7, 1, 0);gridLayoutfile->addWidget(button8, 1, 1);gridLayoutfile->addWidget(button9, 1, 2);// 添加标签用于描述每一行的内容// QLabel *label1 = new QLabel("素材", this);// QLabel *label2 = new QLabel("一键美化", this);// 将标签添加到布局// gridLayout->addWidget(label1, 2, 1, 1, 2, Qt::AlignHCenter);// gridLayoutfile->addWidget(label2, 3, 1, 1, 2, Qt::AlignHCenter);fileGroup->setLayout(gridLayout);fileConstruct->setLayout(gridLayoutfile);hbox->addWidget(fileGroup);hbox->setSpacing(5);hbox->addWidget(fileConstruct);hbox->setSpacing(5);setLayout(hbox);
}

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

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

相关文章

对比预测编码表示学习

对比预测编码表示学习 引言 文章主要提出如下几点&#xff1a;首先将高维数据压缩到更加紧凑的潜在嵌入&#xff08;latent embdding&#xff09;空间&#xff0c;在这个空间中条件预测更容易被建模。第二&#xff0c;在这个潜在空间中使用自回归模型&#xff0c;以对未来的多…

DC系列靶场---DC 2靶场的渗透测试(一)

信息收集 Nmap扫描 nmap -sV -p- -sC -T4 172.30.1.141 域名解析 echo 172.30.1.141 dc-2 >> /etc/hosts 目录枚举 gobuster dir -u http://172.30.1.141 -w work/lab/CTF/ATT_CK_01/SecLists-master/Discovery/Web-Content/big.txt -x .php,.rar,.html,.zip -t 20 -b…

探索XEX数字资产交易的优势与操作指南

随着数字资产市场的快速发展&#xff0c;越来越多的投资者开始关注并参与其中。XEX交易所作为一个新兴的数字资产交易平台&#xff0c;以其用户友好的界面和高效的交易服务&#xff0c;迅速吸引了大量用户。本文将介绍XEX数字资产交易的主要特点和优势&#xff0c;帮助新手更好…

物联网在电力行业的应用

作者主页: 知孤云出岫 这里写目录标题 作者主页:物联网在电力行业的应用简介主要应用领域代码案例分析1. 智能电表数据采集和分析2. 设备监控和预测性维护3. 能耗管理和优化4. 电力负载预测5. 分布式能源管理6. 电动汽车充电管理7. 电网安全与故障检测 物联网在电力行业的应用…

python+onlyoffice+vue3项目实战20240722笔记,环境搭建和前后端基础代码

开发后端 先创建data目录,然后在data目录下创建一个test.docx测试文档。 后端代码: import json import req import api from api import middleware, PlainTextResponseasync def doc_callback(request):data = await api.req.get_json(request)print("callback ==…

数据结构——堆(C语言版)

树 树的概念&#xff1a; 树&#xff08;Tree&#xff09;是一种抽象数据结构&#xff0c;它由节点&#xff08;node&#xff09;的集合组成&#xff0c;这些节点通过边相连&#xff0c;把 节点集合按照逻辑顺序抽象成图像&#xff0c;看起来就像一个倒挂着的树&#xff0c;也…

使用C#手搓Word插件

WordTools主要功能介绍 编码语言&#xff1a;C#【VSTO】 1、选择 1.1、表格 作用&#xff1a;全选文档中的表格&#xff1b; 1.2、表头 作用&#xff1a;全选文档所有表格的表头【第一行】&#xff1b; 1.3、表正文 全选文档中所有表格的除表头部分【除第一行部分】 1.…

java面向对象进阶篇--《多态》

目录 一、前言 二、认识多态 方法重写&#xff08;Override&#xff09;&#xff1a; 方法重载&#xff08;Overload&#xff09;&#xff1a; 示例&#xff1a; Person类&#xff08;父类&#xff09; Administrator&#xff08;子类&#xff09; Student&#xff08;子…

docker搭建ES 8.14 集群

参考&#xff1a;【docker搭建es8集群kibana】_docker 安装生产级 es 8.14 集群-CSDN博客 1、之前已搭建一台单机版的dockerES集群 参见 Elasticsearch docker 安装_docker 安装es8.14.3-CSDN博客 2、现在需要重新搭建为docker ES集群 准备新搭建3个点 一、准备工作 提前开…

构建网络安全之盾:应对“微软蓝屏”教训的全面策略

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

深度学习模型Transformer结构

Transformer结构是一种基于自注意力&#xff08;Self-Attention&#xff09;机制的深度学习模型&#xff0c;最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出&#xff0c;用于解决自然语言处理&#xff08;NLP&#xff09;领域的任务&#xff0c;如机器翻…

MySQL --- 库的操作

一、创建数据库 create database [ if not exists ] 数据库名; // []中的为可选项 在创建库时&#xff0c;也可以指定数据库采用的字符集(character set)和数据库字符集的校验规则(collate) (当我们创建数据库没有指定字符集和校验规则时&#xff0c;系统使用默认字符集&#x…

【复习】软件工程

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现&#xff1a; 开发成本和进度的估计常常很不准确 用户对已完成的软件系统不满意&#xff0c;闭门造车 软件质量&#xff08;quality&#xff09;不可靠 软件常常是不可维护的 软件产品供不应…

css技巧混合模式

看上面这个神奇的效果&#xff0c;文字在黑色背景里面显示为白色&#xff0c;而在白色的背景里面显示为黑色&#xff0c;这就是文字智能适配背景。 看到这样的需求&#xff0c;大多数人第一时间想到的是&#xff0c;文字元素有两个&#xff0c;是完全重叠的两层&#xff0c;一…

Facebook在内容创作中的新策略与机会

随着社交媒体的不断发展&#xff0c;内容创作已经成为了平台吸引和留住用户的核心竞争力。Facebook作为全球最大的社交平台之一&#xff0c;不断调整和优化其内容创作策略&#xff0c;以适应用户需求的变化和技术的进步。本文将深入探讨Facebook在内容创作中的新策略与机会&…

考研复习7月进度严重滞后?

宇哥说&#xff1a;来不及了&#xff01; 因为基础30讲和强化36讲&#xff0c;加起来已经快300小时了。 所以&#xff0c;必须换个思路&#xff1a; 不看课行吗&#xff1f; 大多数人7月的情况是这样的&#xff1a; 1. 听完线代&#xff0c;高数知识点忘得差不多了&#xf…

JMeter接口测试-3.断言及参数化测试

1. 断言 JMeter官方断言&#xff08;Assertion&#xff09;的定义 用于检查测试中得到的响应数据是否符合预期&#xff0c;用于保证测试过程中的数据交互与预期一致 断言的目的&#xff1a; 一个取样器可以添加多个不同形式的断言&#xff0c;根据你的检查需求来添加相应的…

自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 2. 功能定义3. 功能原理4. 传感器架构5. 实…

Java语言程序设计基础篇_编程练习题**15.18(使用鼠标来移动一个矩形)

**15.18(使用鼠标来移动一个矩形) 请编写一个程序显示一个矩形。可以使用鼠标单击矩形内部并且拖动&#xff08;即按住鼠标移动&#xff09;矩形到鼠标的位置。鼠标点成为矩形的中央习题思路&#xff1a; 新建一个面板Pane()&#xff0c;新建一个Rectangle() 为Rectangle注册…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…