切换风格的写法:
先看看样式效果:
mian_window.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
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 高度为屏幕高度的八分之一
// 创建 QTabWidget
toolTablWidget_ = 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);
}
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » QT写一个mainWindow
发表评论 取消回复