QT 从CSS文件中加载不同主题

项目场景:

在很多项目中会设计多主题供用户选择


解决方案:

从.css文件中加载样式表是一种方法

// 导入所需的库和命名空间
#include <QMainWindow>
#include <QStringList>
#include <QFile>
#include <QPalette>
#include <QColor>

namespace Ui {
class MainWindow;
}

// MainWindow 类定义,继承自 QMainWindow
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    // 构造函数
    explicit MainWindow(QWidget *parent = 0);
    // 析构函数
    ~MainWindow();

private slots:
    // 当下拉菜单的选项改变时触发的槽函数
    void on_comboBoxStyle_currentTextChanged(const QString &arg1);

private:
    // 私有成员:用于存储样式名称的列表
    QStringList styleList;
    Ui::MainWindow *ui;

    // 设置应用程序样式的函数
    void setAppStyle(QString styleName);
};

// MainWindow 类的构造函数实现
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 阻塞信号,防止在初始化时触发槽函数
    ui->comboBoxStyle->blockSignals(true);

    // 向下拉菜单添加各种样式选项
    styleList << tr("银色") << tr("蓝色") << tr("浅蓝色") << tr("深蓝色") << tr("灰色") << tr("浅灰色")
              << tr("深灰色") << tr("黑色") << tr("浅黑色") << tr("深黑色") << tr("PS黑色") << tr("黑色扁平") << tr("白色扁平");
    ui->comboBoxStyle->addItems(styleList);

    // 解除阻塞信号
    ui->comboBoxStyle->blockSignals(false);

    // 读取配置文件,设置初始样式
    int i = MyIniFile::readIni("./sys/sys.ini", "/sys/style").toInt();
    ui->comboBoxStyle->setCurrentIndex(i);
    setAppStyle(styleList.at(i));
}

// 设置应用程序样式的函数实现
void MainWindow::setAppStyle(QString styleName)
{
    // 默认样式文件路径
       QString qssFile = ":/qss/blue.css";

    // 其他样式
    if (styleName == tr("银色")) {
        qssFile = ":/qss/silvery.css";
    } else if (styleName == tr("蓝色")) {
        qssFile = ":/qss/blue.css";
    } else if (styleName == tr("浅蓝色")) {
        qssFile = ":/qss/lightblue.css";
    } else if (styleName == tr("深蓝色")) {
        qssFile = ":/qss/darkblue.css";
    } else if (styleName == tr("灰色")) {
        qssFile = ":/qss/gray.css";
    } else if (styleName == tr("浅灰色")) {
        qssFile = ":/qss/lightgray.css";
    } else if (styleName == tr("深灰色")) {
        qssFile = ":/qss/darkgray.css";
    } else if (styleName == tr("黑色")) {
        qssFile = ":/qss/black.css";
    } else if (styleName == tr("浅黑色")) {
        qssFile = ":/qss/lightblack.css";
    } else if (styleName == tr("深黑色")) {
        qssFile = ":/qss/darkblack.css";
    } else if (styleName == tr("PS黑色")) {
        qssFile = ":/qss/psblack.css";
    } else if (styleName == tr("黑色扁平")) {
        qssFile = ":/qss/flatblack.css";
    } else if (styleName == tr("白色扁平")) {
        qssFile = ":/qss/flatwhite.css";
    }

    // 从文件中读取样式并应用
    QFile file(qssFile);
    if (file.open(QFile::ReadOnly)) {
        QString qss = QLatin1String(file.readAll());
        QString paletteColor = qss.mid(20, 7);
        qApp->setPalette(QPalette(QColor(paletteColor)));
        qApp->setStyleSheet(qss);
        file.close();
    }
}

// 当下拉菜单选项改变时的槽函数实现
void MainWindow::on_comboBoxStyle_currentTextChanged(const QString &arg1)
{
    // 设置新的应用程序样式
    setAppStyle(arg1);

    // 更新配置文件中的样式索引
    QString styleIndex = QString::number(ui->comboBoxStyle->currentIndex());
    MyIniFile::writeIni("./sys/sys.ini", "/sys/style", styleIndex);
}

  • 39
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt QSS(Qt Style Sheets)是一种界面样式定义文件,用于美化Qt应用程序的界面。它可以轻松地更改应用程序的外观,包括颜色、字体、边框等等。下面是一些关于Qt QSS界面美化文件的要点: 1. 语法:Qt QSS使用类似于CSS的语法,可以定义各种UI元素的样式。可以通过选择器、属性和值的组合来选择和修改UI元素。 2. 文件应用:可以将Qt QSS文件应用于整个应用程序、单个窗口或特定的UI控件。通过使用setStyleSheet()方法,可以将QSS文件加载到应用程序。 3. 样式修改:Qt QSS文件可以修改各种UI元素的样式和外观。例如,可以更改按钮的颜色、边框和文本样式,也可以更改文本框的颜色和字体。 4. 状态修改:Qt QSS文件还可以根据控件的状态来修改其样式。例如,可以根据鼠标悬停、按下或禁用状态来修改按钮的样式。 5. 层叠样式:Qt QSS支持层叠样式,即可以为不同的控件定义不同的样式,并可以通过选择器的层次结构来覆盖或继承样式。 6. 预定义属性:Qt QSS提供了一些预定义属性,用于快速设置UI元素的样式。例如,可以使用"color"属性设置文本颜色,使用"font-family"属性设置字体。 7. 动态样式:可以在运行时动态地修改Qt QSS文件。通过重新加载或修改QSS文件,可以实现在无需重新编译应用程序的情况下更改界面样式。 总的来说,Qt QSS是一种功能强大的界面美化文件,能够轻松地自定义Qt应用程序的外观和样式。通过使用QSS,可以快速而灵活地修改UI元素的样式,增强应用程序的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值