Qt5 응용 프로그램에서 "융합"스타일에 어두운 테마를 사용하고 있습니다. 테마를 전환하는 기능을 추가하고 싶습니다. 사용자가 응용 프로그램을 다시 시작해야하는 경우에는 문제가 없지만 응용 프로그램을 시작할 때 팔레트가 올바르게 초기화됩니다. 그러나 다시 시작하지 않고이 런타임을 수행 할 수 있기를 원합니다. 위젯의 대부분은이 가능성을 지원하지만 다른 일부 (예 : QComboBox
, QSpinBox
, QTreeView
)는 지원하지 않습니다. 다음 스 니펫으로이를 증명할 수 있습니다. '스타일 재설정'버튼을 누르면 위젯의 일부분이 올바르게 변경되지만 다른 부분은 올바르게 변경되지 않습니다. Windows 10에서 최신 Qt 5.10을 사용하고 있습니다.이 문제는 Qt 버그로 생각되지만 해결 방법이나 해킹이 있습니까? 응용 프로그램을 다시 시작하지 않고 응용 프로그램 팔레트 런타임을 변경하십시오.
이
내main.cpp
입니다 :
이
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// apply the dark color scheme
qApp->setStyle("fusion");
QPalette darkPalette;
darkPalette.setColor(QPalette::Window,QColor(53,53,53));
darkPalette.setColor(QPalette::WindowText,Qt::white);
darkPalette.setColor(QPalette::Disabled,QPalette::WindowText,QColor(127,127,127));
darkPalette.setColor(QPalette::Base,QColor(42,42,42));
darkPalette.setColor(QPalette::AlternateBase,QColor(66,66,66));
darkPalette.setColor(QPalette::ToolTipBase,Qt::white);
darkPalette.setColor(QPalette::ToolTipText,Qt::white);
darkPalette.setColor(QPalette::Text,Qt::white);
darkPalette.setColor(QPalette::Disabled,QPalette::Text,QColor(127,127,127));
darkPalette.setColor(QPalette::Dark,QColor(35,35,35));
darkPalette.setColor(QPalette::Shadow,QColor(20,20,20));
darkPalette.setColor(QPalette::Button,QColor(53,53,53));
darkPalette.setColor(QPalette::ButtonText,Qt::white);
darkPalette.setColor(QPalette::Disabled,QPalette::ButtonText,QColor(127,127,127));
darkPalette.setColor(QPalette::BrightText,Qt::red);
darkPalette.setColor(QPalette::Link,QColor(42,130,218));
darkPalette.setColor(QPalette::Highlight,QColor(42,130,218));
darkPalette.setColor(QPalette::Disabled,QPalette::Highlight,QColor(80,80,80));
darkPalette.setColor(QPalette::HighlightedText,Qt::white);
darkPalette.setColor(QPalette::Disabled,QPalette::HighlightedText,QColor(127,127,127));
qApp->setPalette(darkPalette);
Widget w;
w.show();
return a.exec();
}
이 widget.h
입니다 :
#pragma once
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
};
및 widget.cpp
:
#include "widget.h"
#include <QVBoxLayout>
#include <QComboBox>
#include <QSpinBox>
#include <QTreeWidget>
#include <QPushButton>
#include <QApplication>
#include <QStyleFactory>
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
auto layout = new QVBoxLayout(this);
auto comboBox = new QComboBox();
auto spinBox = new QSpinBox();
auto listWidget = new QTreeWidget();
listWidget->setHeaderLabels(QStringList() << "Column1" << "Column2");
auto button = new QPushButton("Reset style");
// reset the palette to the default 'light' color scheme
connect(button, &QPushButton::clicked,
[] { qApp->setPalette(QStyleFactory::create("fusion")->standardPalette()); });
layout->addWidget(comboBox);
layout->addWidget(spinBox);
layout->addWidget(listWidget);
layout->addWidget(button);
}
이 어둠이다
1,363,210이 스타일을 재설정 한 후 :
버그를 기록한 결과 : https://bugreports.qt.io/browse/QTBUG-65475 –