Как использовать QPROPERTY в QPalette?

Я пытаюсь использовать набор Q_PROPERTY в моей таблице стилей, чтобы изменить значение в QPalette, это возможно? Например, если я установил QStyle в Fusion в моем виджете MainWindow, возможно ли изменить Qt :: Window и т. Д. С помощью этого метода?

Все компилируется нормально, но отображается только черный цвет, поэтому переменная, вероятно, заполнена значением мусора? Насколько я знаю, таблица стилей переопределяет все остальное, так что, думаю, таблица стилей не загружается вовремя для конструктора?

mainwindow.cpp

#include <QStyleFactory>
#include <QWidget>
#include <QFile>
#include "theme.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
{
QFile File("://stylesheet.qss");
File.open(QFile::ReadOnly);
QString StyleSheet = QLatin1String(File.readAll());
qApp->setStyleSheet(StyleSheet);

Theme *themeInstance = new Theme;

QApplication::setStyle(QStyleFactory::create("Fusion"));

QPalette dp;
dp.setColor(QPalette::Window, QColor(themeInstance->customColor()));
qApp->setPalette(dp);
}

theme.h

#ifndef THEME_H
#define THEME_H

class Theme : public QWidget
{
Q_OBJECT
Q_PROPERTY(QColor customColor READ customColor WRITE setCustomColor DESIGNABLE true)
public:
Theme(QWidget *parent = nullptr);

QColor customColor() const { return m_customColor; }
void setCustomColor(const QColor &c) { m_customColor = c; }
private:
QColor m_customColor;
};

#endif // THEME_H

stylesheet.qss

* { // global only for test purposes
qproperty-customColor: red;
}

0

Решение

QSS не вызываются автоматически, они обычно обновляются при отображении виджетов, в вашем случае, поскольку themeInstance не отображается, не использует таблицу стилей. Картина может быть вынуждена с помощью polish() метод QStyle

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr):QMainWindow{parent}{
qApp->setStyleSheet("Theme{qproperty-customColor: red;}");
Theme *themeInstance = new Theme;
qApp->setStyle(QStyleFactory::create("Fusion"));
qApp->style()->polish(themeInstance);
QPalette dp;
dp.setColor(QPalette::Window, QColor(themeInstance->customColor()));
qApp->setPalette(dp);
}
};
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]