【发布时间】:2021-02-14 12:32:22
【问题描述】:
所以我有两个 qss 文件,其中包含所有按钮背景的样式表 一个文件用于普通模式,另一个文件用于暗模式,这两个文件之间的唯一区别是颜色选择。 StyleFile.qss 和 DarkStyleFile.qss
在我只有一个 qss 之前,我习惯将它设置为这样的应用程序:
#include "mainwindow.h"
#include <QFile>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow w;
QFile stylesheet_file(":/Images/Resources/StyleFile.qss");
stylesheet_file.open(QFile::ReadOnly);
QString stylesheet = QLatin1String(stylesheet_file.readAll());
app.setStyleSheet(stylesheet);
w.show();
return app.exec();
}
现在我有两个 qss 文件,我希望能够通过单击应用程序中的按钮在它们之间进行切换,例如我有一个名为“darkmode”的复选框或切换按钮,并且一旦签入就会将路径更改为: ":/Images/Resources/DarkStyleFile.qss"
这是我的第一次尝试:
//mainwindow.cpp with QPushbutton set as checkable named toggle
void MainWindow::on_toggle_clicked()
{
QApplication *app= (QApplication*)QApplication::instance();
app->processEvents();
QFile stylesheet_file(":/Images/Resources/StyleFile.qss");
if(ui->toggle->isChecked()){
QFile stylesheet_file(":/Images/Resources/DarkStyleFile.qss");
}
stylesheet_file.open(QFile::ReadOnly);
QString stylesheet = QLatin1String(stylesheet_file.readAll());
app->setStyleSheet(stylesheet);
}
int main(int argc, char *argv[])
{
//create application and main window
QApplication app(argc, argv);
MainWindow w;
w.show();
return app.exec();
}
这根本不起作用,它向我展示了没有背景的默认 qt 按钮设计,所以我尝试了其他方法
这是我的第二次尝试: mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "admininterface.h"
#include "employeeinterface.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QString on_toggle_clicked();
private slots:
void on_Exit_clicked();
void on_Login_clicked();
private:
Ui::MainWindow *ui;
AdminInterface *Admin;
};
#endif // MAINWINDOW_H
mainwindow.cpp
QString MainWindow::on_toggle_clicked()
{
QFile stylesheet_file(":/Images/Resources/StyleFile.qss");
if(ui->toggle->isChecked()){
QFile stylesheet_file(":/Images/Resources/DarkStyleFile.qss");
}
stylesheet_file.open(QFile::ReadOnly);
QString stylesheet = QLatin1String(stylesheet_file.readAll());
return stylesheet;
}
main.cpp
#include "mainwindow.h"
#include <QFile>
#include <QApplication>
int main(int argc, char *argv[])
{
//create application and main window
QApplication app(argc, argv);
MainWindow w;
app.setStyleSheet(w.on_toggle_clicked());
w.show();
return app.exec();
}
当我现在运行该应用程序时,它使用普通样式表 StyleFile.qss 进行了设置,但是当我单击旨在更改路径的按钮时,没有任何反应,我没有知道是否因为样式文件仅在应用程序启动时设置并且在运行时无法更改,我是否需要更新某些内容或者如果我做错了什么,我希望能够将样式表从浅色更改为深色用户在应用程序中随时点击按钮时的模式,我做错了什么?或者有没有更简单的方法,请告诉我,如果还有什么不清楚或我没有提供足够的信息,请评论并告诉我,我会尽快修复。
【问题讨论】:
-
您在
if(ui->toggle->isChecked()) {条件中的stylesheet_file变量会隐藏紧接在条件之前定义的同名变量,因此永远不会使用。 -
我已经研究了几天,我想我知道这样做是不可能的,因为 int main() 没有更新,我一直在考虑调用 QApplication在主窗口中,但我不能这样做,因为只允许一个 QApp 已经在主窗口中,而且我还阅读了有关线程的内容,所有这些内容对于像这样的简单任务来说都很复杂