[Qt] Implement theme selection

This commit is contained in:
wheremyfoodat 2023-09-30 18:35:50 +03:00
parent 837bf7524f
commit 36506e18bb
2 changed files with 72 additions and 24 deletions

View file

@ -1,9 +1,9 @@
#pragma once #pragma once
#include <QApplication> #include <QApplication>
#include <QComboBox>
#include <QMenuBar> #include <QMenuBar>
#include <QPalette> #include <QPalette>
#include <QPushBUtton>
#include <QtWidgets> #include <QtWidgets>
#include "panda_qt/screen.hpp" #include "panda_qt/screen.hpp"
@ -12,11 +12,16 @@ class MainWindow : public QMainWindow {
Q_OBJECT Q_OBJECT
private: private:
enum class Theme : int {
System = 0, Light = 1, Dark = 2,
};
QComboBox* themeSelect = nullptr;
QMenuBar* menuBar = nullptr; QMenuBar* menuBar = nullptr;
QPushButton* themeButton = nullptr;
ScreenWidget screen; ScreenWidget screen;
void setDarkTheme(); Theme currentTheme;
void setTheme(Theme theme);
public: public:
MainWindow(QApplication* app, QWidget* parent = nullptr); MainWindow(QApplication* app, QWidget* parent = nullptr);

View file

@ -14,31 +14,74 @@ MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent)
auto pandaMenu = menuBar->addMenu(tr("PANDA")); auto pandaMenu = menuBar->addMenu(tr("PANDA"));
auto pandaAction = pandaMenu->addAction(tr("panda...")); auto pandaAction = pandaMenu->addAction(tr("panda..."));
auto themeButton = new QPushButton(tr("Dark theme"), this); // Set up theme selection
themeButton->setGeometry(40, 40, 100, 400); setTheme(Theme::Dark);
themeButton->show(); themeSelect = new QComboBox(this);
connect(themeButton, &QPushButton::pressed, this, [&]() { setDarkTheme(); }); themeSelect->addItem("System");
themeSelect->addItem("Light");
themeSelect->addItem("Dark");
themeSelect->setCurrentIndex(static_cast<int>(currentTheme));
themeSelect->setGeometry(40, 40, 100, 50);
themeSelect->show();
connect(themeSelect, &QComboBox::currentIndexChanged, this, [&](int index) { setTheme(static_cast<Theme>(index)); });
} }
MainWindow::~MainWindow() { delete menuBar; } MainWindow::~MainWindow() { delete menuBar; }
void MainWindow::setDarkTheme() { void MainWindow::setTheme(Theme theme) {
QApplication::setStyle(QStyleFactory::create("Fusion")); currentTheme = theme;
QPalette p; switch (theme) {
p.setColor(QPalette::Window, QColor(53, 53, 53)); case Theme::Dark: {
p.setColor(QPalette::WindowText, Qt::white); QApplication::setStyle(QStyleFactory::create("Fusion"));
p.setColor(QPalette::Base, QColor(25, 25, 25));
p.setColor(QPalette::AlternateBase, QColor(53, 53, 53));
p.setColor(QPalette::ToolTipBase, Qt::white);
p.setColor(QPalette::ToolTipText, Qt::white);
p.setColor(QPalette::Text, Qt::white);
p.setColor(QPalette::Button, QColor(53, 53, 53));
p.setColor(QPalette::ButtonText, Qt::white);
p.setColor(QPalette::BrightText, Qt::red);
p.setColor(QPalette::Link, QColor(42, 130, 218));
p.setColor(QPalette::Highlight, QColor(42, 130, 218)); QPalette p;
p.setColor(QPalette::HighlightedText, Qt::black); p.setColor(QPalette::Window, QColor(53, 53, 53));
qApp->setPalette(p); p.setColor(QPalette::WindowText, Qt::white);
p.setColor(QPalette::Base, QColor(25, 25, 25));
p.setColor(QPalette::AlternateBase, QColor(53, 53, 53));
p.setColor(QPalette::ToolTipBase, Qt::white);
p.setColor(QPalette::ToolTipText, Qt::white);
p.setColor(QPalette::Text, Qt::white);
p.setColor(QPalette::Button, QColor(53, 53, 53));
p.setColor(QPalette::ButtonText, Qt::white);
p.setColor(QPalette::BrightText, Qt::red);
p.setColor(QPalette::Link, QColor(42, 130, 218));
p.setColor(QPalette::Highlight, QColor(42, 130, 218));
p.setColor(QPalette::HighlightedText, Qt::black);
qApp->setPalette(p);
break;
}
case Theme::Light: {
QApplication::setStyle(QStyleFactory::create("Fusion"));
QPalette p;
p.setColor(QPalette::Window, Qt::white);
p.setColor(QPalette::WindowText, Qt::black);
p.setColor(QPalette::Base, QColor(243, 243, 243));
p.setColor(QPalette::AlternateBase, Qt::white);
p.setColor(QPalette::ToolTipBase, Qt::black);
p.setColor(QPalette::ToolTipText, Qt::black);
p.setColor(QPalette::Text, Qt::black);
p.setColor(QPalette::Button, Qt::white);
p.setColor(QPalette::ButtonText, Qt::black);
p.setColor(QPalette::BrightText, Qt::red);
p.setColor(QPalette::Link, QColor(42, 130, 218));
p.setColor(QPalette::Highlight, QColor(42, 130, 218));
p.setColor(QPalette::HighlightedText, Qt::white);
qApp->setPalette(p);
break;
}
case Theme::System: {
qApp->setPalette(this->style()->standardPalette());
qApp->setStyle(QStyleFactory::create("WindowsVista"));
qApp->setStyleSheet("");
break;
}
}
} }