项目场景:
在很多项目中会设计多主题供用户选择
解决方案:
从.css文件中加载样式表是一种方法
// 导入所需的库和命名空间
#include <QMainWindow>
#include <QStringList>
#include <QFile>
#include <QPalette>
#include <QColor>namespace Ui {
class MainWindow;
}// MainWindow 类定义,继承自 QMainWindow
class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
// 构造函数
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);
}