qt - 19种精美软件样式

这篇具有很好参考价值的文章主要介绍了qt - 19种精美软件样式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、效果演示

qt - 19种精美软件样式,Qt,QML,qt,命令模式,开发语言

qt - 19种精美软件样式,Qt,QML,qt,命令模式,开发语言

二、核心程序

#include "mainwindow.h"

#include <QtAdvancedStylesheet.h>
#include <QmlStyleUrlInterceptor.h>

#include "ui_mainwindow.h"
#include <QDir>
#include <QApplication>
#include <QAction>
#include <QListWidgetItem>
#include <QDockWidget>
#include <QVBoxLayout>
#include <QPushButton>
#include <QColorDialog>
#include <QDebug>
#include <QQmlEngine>

#include <iostream>


#define _STR(x) #x
#define STRINGIFY(x)  _STR(x)

/**
 * Private data class - pimpl
 */
struct MainWindowPrivate
{
	CMainWindow* _this;
	Ui::MainWindow ui;
	acss::QtAdvancedStylesheet* AdvancedStyleSheet;
	QVector<QPushButton*> ThemeColorButtons;

	/**
	 * Private data constructor
	 */
	MainWindowPrivate(CMainWindow* _public) : _this(_public) {}

	void createThemeColorDockWidget();
	void fillThemeMenu();
	void setSomeIcons();
	void setupQuickWidget();
	void updateThemeColorButtons();
	void updateQuickWidget();

	/**
	 * Loads theme aware icons for the actions in the toolbar
	 */
	void loadThemeAwareToolbarActionIcons();
};


void MainWindowPrivate::createThemeColorDockWidget()
{
	QDockWidget* dock = new QDockWidget(("Change Theme"), _this);
	QWidget* w = new QWidget(dock);
	auto Layout = new QVBoxLayout(w);
	Layout->setContentsMargins(12, 12, 12, 12);
	Layout->setSpacing(12);
	w->setLayout(Layout);
	dock->setWidget(w);
	_this->addDockWidget(Qt::LeftDockWidgetArea, dock);
	dock->setFloating(true);

	const auto& ThemeColors = AdvancedStyleSheet->themeColorVariables();
	for (auto itc = ThemeColors.constBegin(); itc != ThemeColors.constEnd(); ++itc)
	{
		auto Button = new QPushButton(itc.key());
		QObject::connect(Button, &QPushButton::clicked, _this, &CMainWindow::onThemeColorButtonClicked);
		Layout->addWidget(Button);
		ThemeColorButtons.append(Button);
	}

	updateThemeColorButtons();
}


void MainWindowPrivate::updateThemeColorButtons()
{
	for (auto Button : ThemeColorButtons)
	{
		auto Color = AdvancedStyleSheet->themeColor(Button->text());
		QString TextColor = (Color.value() < 128) ? "#ffffff" : "#000000";
		QString ButtonStylesheet = QString("background-color: %1; color: %2;"
			"border: none;").arg(Color.name()).arg(TextColor);
		Button->setStyleSheet(ButtonStylesheet);
	}
}


void MainWindowPrivate::updateQuickWidget()
{
	const auto Source = ui.quickWidget->source();
	ui.quickWidget->setSource({});
	ui.quickWidget->engine()->clearComponentCache();
	ui.quickWidget->setSource(Source);
	ui.quickWidget->setStyleSheet(AdvancedStyleSheet->styleSheet());
}



void MainWindowPrivate::fillThemeMenu()
{
    // Add actions for theme selection
    auto m = ui.menuThemes;
    for (const auto& Theme : AdvancedStyleSheet->themes())
    {
    	QAction* a = new QAction(Theme);
    	m->addAction(a);
    	QObject::connect(a, &QAction::triggered, _this, &CMainWindow::onThemeActionTriggered);
    }

}


void MainWindowPrivate::setSomeIcons()
{
    ui.actionToolbar->setIcon(AdvancedStyleSheet->styleIcon());
    QIcon Icon(":/full_features/images/logo_frame.svg");
    for (int i = 0; i < ui.listWidget_2->count(); ++i)
    {
    	ui.listWidget_2->item(i)->setIcon(Icon);
    }
}

void MainWindowPrivate::setupQuickWidget()
{
    ui.quickWidget->engine()->setUrlInterceptor(
        new acss::CQmlStyleUrlInterceptor(AdvancedStyleSheet));
    ui.quickWidget->setStyleSheet(AdvancedStyleSheet->styleSheet());
    ui.quickWidget->setSource(QUrl("qrc:/full_features/qml/simple_demo.qml"));
    ui.quickWidget->setAttribute(Qt::WA_AlwaysStackOnTop);
    ui.quickWidget->setAttribute(Qt::WA_TranslucentBackground);
    ui.quickWidget->setClearColor(Qt::transparent);
}


void MainWindowPrivate::loadThemeAwareToolbarActionIcons()
{
	ui.actionSelected->setIcon(AdvancedStyleSheet->loadThemeAwareSvgIcon(":/full_features/images/edit.svg"));
	ui.actionaction->setIcon(AdvancedStyleSheet->loadThemeAwareSvgIcon(":/full_features/images/folder_open.svg"));
	ui.actionaction2->setIcon(AdvancedStyleSheet->loadThemeAwareSvgIcon(":/full_features/images/save.svg"));
	ui.actionaction3->setIcon(AdvancedStyleSheet->loadThemeAwareSvgIcon(":/full_features/images/help_outline.svg"));
}


CMainWindow::CMainWindow(QWidget *parent)
    : QMainWindow(parent),
      d(new MainWindowPrivate(this))
{
    d->ui.setupUi(this);

    QString AppDir = qApp->applicationDirPath();
    QString StylesDir = STRINGIFY(STYLES_DIR);
    d->AdvancedStyleSheet = new acss::QtAdvancedStylesheet(this);
    d->AdvancedStyleSheet->setStylesDirPath(StylesDir);
    d->AdvancedStyleSheet->setOutputDirPath(AppDir + "/output");
    d->AdvancedStyleSheet->setCurrentStyle("qt_material");
    d->AdvancedStyleSheet->setDefaultTheme();
    d->AdvancedStyleSheet->updateStylesheet();
    setWindowIcon(d->AdvancedStyleSheet->styleIcon());
    qApp->setStyleSheet(d->AdvancedStyleSheet->styleSheet());
    connect(d->AdvancedStyleSheet, SIGNAL(stylesheetChanged()), this,
    	SLOT(onStyleManagerStylesheetChanged()));

    d->createThemeColorDockWidget();
    d->fillThemeMenu();
    d->setSomeIcons();
    d->setupQuickWidget();
    d->loadThemeAwareToolbarActionIcons();
}

CMainWindow::~CMainWindow()
{
	delete d;
}


void CMainWindow::onThemeActionTriggered()
{
	auto Action = qobject_cast<QAction*>(sender());
	d->AdvancedStyleSheet->setCurrentTheme(Action->text());
	d->AdvancedStyleSheet->updateStylesheet();
}


void CMainWindow::onStyleManagerStylesheetChanged()
{
	qApp->setStyleSheet(d->AdvancedStyleSheet->styleSheet());
	d->updateThemeColorButtons();
	d->updateQuickWidget();
}


void CMainWindow::onThemeColorButtonClicked()
{
	auto Button = qobject_cast<QPushButton*>(sender());
	QColorDialog ColorDialog;
	auto Color = d->AdvancedStyleSheet->themeColor(Button->text());
	ColorDialog.setCurrentColor(Color);
	if (ColorDialog.exec() != QDialog::Accepted)
	{
		return;
	}
	Color = ColorDialog.currentColor();
	d->AdvancedStyleSheet->setThemeVariableValue(Button->text(), Color.name());
	d->AdvancedStyleSheet->updateStylesheet();
}


三、下载链接

https://download.csdn.net/download/u013083044/88856325文章来源地址https://www.toymoban.com/news/detail-836587.html

到了这里,关于qt - 19种精美软件样式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【五一创作】QML、Qt Quick /Qt中绘制圆形

    有多种方法可以在 Qt Quick 中绘制圆形。以下是一些主要方法: 使用 Canvas 元素 使用 Shapes 模块: a. 使用 PathArc 和 PathLine 元素组合绘制一个完整的圆形。 b. 使用 PathEllipse 元素绘制一个椭圆形,并将其设置为圆形。 使用 Rectangle 元素绘制圆角矩形并将圆角半径设置为宽度和高

    2024年02月03日
    浏览(41)
  • QML Qt4版本移植到Qt5概述

    在Qt5中,QML应用程序使用OpenGL场景图架构来渲染,而在Qt4中使用的是图形视图框架。这种结构上的变化导致C++接口进行了大量重构。QtDeclarative模块已被弃用,该模块的类被移动到新的QtQML和QtQuick模块中,名称有了变化,如表3-1所列。如果需要使用Qt5中新的QQml 和QQuick 等类,需

    2024年01月25日
    浏览(50)
  • Qt/C++项目作品精选(祖传/性能凶残/界面精美)

    从事Qt开发十年有余,一开始是做C#.NET开发的,因为项目需要,转行做嵌入式linux开发,在嵌入式linux上做可视化界面开发一般首选Qt,当然现在可选的方案很多比如安卓,但是十多年前那时候板子性能低,安卓在这个上面跑的话卡成屎,当时的内存大概是128MB左右,Qt也是主要

    2024年02月14日
    浏览(36)
  • Qml Qt程序 打包部署

    利用qtcreator安装目录下的命令行工具执行打包命令 1、Widget程序打包 // 将release模式下的exe文件放在单独的打包目录下 // 打开qt自带的命令行工具,执行下面的语句 windeployqt path-to-app-binary  // path-to-app-binary表示需要打包的二进制文件 2、Qml程序打包 // 延用Widget程序打包步骤,

    2024年02月09日
    浏览(57)
  • 【Qt- C++ & Qml 交互】

    2024年01月10日
    浏览(67)
  • Qt6 Qt Quick UI原型学习QML第三篇

    图像 Image(图片)元素 解释 这段代码是使用QtQuick 2.0库来创建一个Image(图片)元素的定义。以下是代码的解释: Image 元素是一个用于显示图像的控件。 id: root 是为Image元素指定了一个标识符,以便在代码中引用它。 signal clicked 定义了一个名为 clicked 的信号。信号用于在特

    2024年02月16日
    浏览(53)
  • Qt6 Qt Quick UI原型学习QML第二篇

    元素可以分为 视觉元素和非视觉元素 。视觉元素(如Rectangle)具有几何形状,并且通常在屏幕上呈现一个区域。非可视元素(如Timer)提供一般功能,通常用于操作可视元素。 目前,我们将关注基本的视觉元素,例如 Item, Rectangle, Text, Image和MouseArea 。但是,通过使用Qt Quick Contro

    2024年02月16日
    浏览(38)
  • Qt6 Qt Quick UI原型学习QML第六篇

    import QtQuick 2.12 :导入QtQuick模块的版本2.12,用于创建Qt快速应用程序的用户界面。 import QtQuick.Window 2.12 :导入QtQuick.Window模块的版本2.12,用于创建窗口对象。 import QtQuick.Controls 2.12 :导入QtQuick.Controls模块的版本2.12,用于创建用户界面控件。 Window {} :定义了一个窗口对象,

    2024年02月16日
    浏览(49)
  • Qt6 Qt Quick UI原型学习QML第七篇

    导入 QtQuick 2.12 导入 QtQuick.Window 2.12 导入 QtQuick.Controls 2.12 导入 QtQuick.Layouts 1.3 导入 Qt.labs.calendar 1.0 矩形 { id: root 属性 int duration: 3000 } 这段代码使用了QtQuick库来创建一个用户界面。其中的Rectangle是界面的根元素。 id: root : 为Rectangle元素指定唯一的标识符root。 property int durat

    2024年02月16日
    浏览(40)
  • Qt Quick程序的发布|Qt5中QML和Qt Quick 的更改

    # Quick程序的发布旧版做法 # Qt5中QML和Qt Quick 的更改 1.QML语言的更改(Qt4-Qt5)     在QML语言中,只有少量更改会影响QML代码的迁移:无法直接导入单独的文件(例如:import\\\"MyType.qml”),需要导人该文件所在的目录;     JavaScript文件中的相对路径被解析为相对于该JavaScrip

    2024年01月25日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包