欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Qt动态设置样式,实现样式实时切换

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

2025/5/7 13:01:53 来源:https://blog.csdn.net/qq_39417283/article/details/146344408  浏览:    关键词:Qt动态设置样式,实现样式实时切换

文章目录

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

概要

最近需要设计界面,但是使用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);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词