Qt动态设置样式,实现样式实时切换

devtools/2025/3/29 7:20:42/

文章目录

    • 概要
      • 插件实现界面
    • 核心代码
      • 设置样式
    • 扩展
      • 导入样式
      • 导出样式

概要

最近需要设计界面,但是使用Qt的Designer只能看到每个界面单独的样式,程序中有些事需要主界面调用进行组合的界面,因此需要写一个插件Ui可以直接输入样式内容,进行实时设置,查看样式效果。

插件实现界面

  • 应用样式前

在这里插入图片描述

  • 应用样式后
    在这里插入图片描述

核心代码

设置样式

void SetSheetStyle::on_pbtn_Apply_clicked()
{qApp->setStyleSheet(ui->pte_SheetStyle->toPlainText());qApp->style()->unpolish(qApp);    qApp->style()->polish(qApp);
}

详解:
设置样式代码为:A->setStyleSheet(ui->pte_SheetStyle->toPlainText());
如果为程序全局设置则A为qApp;
如果为特定的Ui控件设置则A为控件名。

注意:
当程序已经设置了样式之后,再次设置样式必须添加
qApp->style()->unpolish(qApp);
qApp->style()->polish(qApp);
这两行代码,因为给qApp设置样式前,需要卸载当前样式,之后安装样式才能生效


扩展

我上面的实现里面添加了导入外部的样式表和将当前样式表导出为qss文件的功能,如需,可以添加。

导入样式

void SetSheetStyle::on_pbtn_importQss_clicked()
{// 1. 获取打开路径QString path = QCoreApplication::applicationDirPath();QString fileName = QFileDialog::getOpenFileName(nullptr,                   // 父窗口"打开文件",                // 对话框标题path,          // 默认目录"文本文件 (*.txt);;所有文件 (*)" // 文件过滤器);// 检查用户是否取消了对话框if (fileName.isEmpty()) {QMessageBox::warning(nullptr, "警告", "未选择文件路径!");return;}// 2. 创建并打开文件QFile file(fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {QMessageBox::critical(nullptr, "错误", "无法打开文件:" + file.errorString());return;}// 3. 读取内容QTextStream in(&file);QString str = in.readAll();// 4. 关闭文件(QFile析构时会自动关闭,但显式关闭更好)file.close();// 5. 显示到文本框ui->pte_SheetStyle->setPlainText(str);}

导出样式

void SetSheetStyle::on_pbtn_ExportQss_clicked()
{   // 1. 获取保存路径QString path = QCoreApplication::applicationDirPath();QString fileName = QFileDialog::getSaveFileName(nullptr,                   // 父窗口"保存文件",                // 对话框标题path,          // 默认目录"文本文件 (*.txt);;所有文件 (*)" // 文件过滤器);// 检查用户是否取消了对话框if (fileName.isEmpty()) {QMessageBox::warning(nullptr, "警告", "未选择文件路径!");return;}// 2. 创建并打开文件QFile file(fileName);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {QMessageBox::critical(nullptr, "错误", "无法创建文件:" + file.errorString());return;}// 3. 写入内容/*QTextStream out(&file);out << str.data();*/QString str = ui->pte_SheetStyle->toPlainText();const char* data = str.toStdString().c_str();file.write(data);// 4. 关闭文件(QFile析构时会自动关闭,但显式关闭更好)file.close();// 可选:提示成功QMessageBox::information(nullptr, "成功", "文件已保存至:" + fileName);
}

http://www.ppmy.cn/devtools/169256.html

相关文章

【leetcode hot 100 39】组合总和

错误解法一&#xff1a;每一次回溯都遍历提供的数组 class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integer> te…

使用 Selenium 控制现有 Edge 窗口以规避爬虫检测

在网络爬虫开发中&#xff0c;网站的防爬机制常常会检测自动化工具&#xff08;如 Selenium&#xff09;启动的浏览器实例。为了绕过这种检测&#xff0c;一种有效的方法是利用 Selenium 连接到手动打开的现有浏览器窗口&#xff0c;而不是每次都启动一个新的实例。本文将详细介…

python每日十题(5)

保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。Python 3.x版本中有35个保留字&#xff0c;分别为&#xff1a;and, as,assert,async,await,break,class,continue,def,del,elif,else, except, False, finally,for,from,global, if,import…

基于python+django+mysql的小区物业管理系统源码+运行步骤

该系统是基于pythondjango开发的小区物业管理系统。适用场景&#xff1a;大学生、课程作业、毕业设计。学习过程中&#xff0c;如遇问题可以在github给作者留言。主要功能有&#xff1a;业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。源码…

GAF-CNN-DBO-LSSVM故障诊断/分类预测(Matlab)

GAF-CNN-DBO-LSSVM故障诊断/分类预测&#xff0c;附带模型研究报告&#xff08;Matlab&#xff09; 目录 GAF-CNN-DBO-LSSVM故障诊断/分类预测&#xff0c;附带模型研究报告&#xff08;Matlab&#xff09;效果一览基本描述程序设计参考资料 效果一览 基本描述 本研究提出的GA…

【构建CV图像识别系统】从传统方法到深度学习

目录 1. 图像的基本概念1.1 像素与色彩1.2 过滤与卷积 2. 图像分类与检测3. 图像特征的提取3.1 全局特征3.2 局部特征3.2.1 边缘&#xff08;Edge&#xff09;3.2.2 角点&#xff08;Corner&#xff09;3.2.3 SIFT 特征 4. 传统方法与深度学习在图像识别中的应用4.1 基于传统方…

Node.js 和 Vite 配置文件中`__dirname`

在 Node.js 和 Vite 配置文件中&#xff0c;__dirname 是一个全局变量&#xff0c;表示当前模块的目录名。具体来说&#xff1a; 1. Node.js 中的 __dirname 在 Node.js 环境中&#xff0c;__dirname 表示当前正在执行的 JavaScript 文件所在的目录的绝对路径。它是一个字符串…

Python 生成数据(绘制简单的折线图)

数据可视化 指的是通过可视化表示来探索数据&#xff0c;它与数据挖掘 紧密相关&#xff0c;而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表 示的小型数字列表&#xff0c;也可以是数以吉字节的数据。 绘制简单的折线图 下面来使用matplotl…