Allow to use Qt's default QStyle

Relevant prior PR #21553

PR #21605.
This commit is contained in:
sledgehammer999 2024-10-21 19:59:55 +03:00 committed by GitHub
parent 3ab9fe55e5
commit a3ac692c25
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 20 deletions

View file

@ -461,7 +461,10 @@ void OptionsDialog::saveBehaviorTabOptions() const
pref->setLocale(locale); pref->setLocale(locale);
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
pref->setStyle(m_ui->comboStyle->currentText()); if (const QVariant systemStyle = m_ui->comboStyle->currentData(); systemStyle.isValid())
pref->setStyle(systemStyle.toString());
else
pref->setStyle(m_ui->comboStyle->currentText());
#endif #endif
#ifdef QBT_HAS_COLORSCHEME_OPTION #ifdef QBT_HAS_COLORSCHEME_OPTION
@ -1698,18 +1701,27 @@ bool OptionsDialog::isSplashScreenDisabled() const
void OptionsDialog::initializeStyleCombo() void OptionsDialog::initializeStyleCombo()
{ {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
m_ui->labelStyleHint->setText(tr("%1 is recommended for best compatibility with Windows dark mode"
, "Fusion is recommended for best compatibility with Windows dark mode").arg(u"Fusion"_s));
m_ui->comboStyle->addItem(tr("System", "System default Qt style"), u"system"_s);
m_ui->comboStyle->setItemData(0, tr("Let Qt decide the style for this system"), Qt::ToolTipRole);
m_ui->comboStyle->insertSeparator(1);
QStringList styleNames = QStyleFactory::keys(); QStringList styleNames = QStyleFactory::keys();
std::sort(styleNames.begin(), styleNames.end(), Utils::Compare::NaturalLessThan<Qt::CaseInsensitive>()); std::sort(styleNames.begin(), styleNames.end(), Utils::Compare::NaturalLessThan<Qt::CaseInsensitive>());
m_ui->comboStyle->addItems(styleNames); m_ui->comboStyle->addItems(styleNames);
const QString prefStyleName = Preferences::instance()->getStyle(); const QString prefStyleName = Preferences::instance()->getStyle();
const QString selectedStyleName = prefStyleName.isEmpty() ? QApplication::style()->name() : prefStyleName; const QString selectedStyleName = prefStyleName.isEmpty() ? QApplication::style()->name() : prefStyleName;
m_ui->comboStyle->setCurrentText(selectedStyleName);
if (selectedStyleName.compare(u"system"_s, Qt::CaseInsensitive) != 0)
m_ui->comboStyle->setCurrentText(selectedStyleName);
#else #else
m_ui->labelStyle->hide(); m_ui->labelStyle->hide();
m_ui->comboStyle->hide(); m_ui->comboStyle->hide();
m_ui->labelStyleHint->hide();
m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyle); m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyle);
m_ui->UISettingsBoxLayout->removeWidget(m_ui->comboStyle); m_ui->UISettingsBoxLayout->removeWidget(m_ui->comboStyle);
m_ui->UISettingsBoxLayout->removeItem(m_ui->spacerStyle); m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyleHint);
#endif #endif
} }

View file

@ -179,17 +179,13 @@
<widget class="QComboBox" name="comboStyle"/> <widget class="QComboBox" name="comboStyle"/>
</item> </item>
<item row="2" column="2"> <item row="2" column="2">
<spacer name="spacerStyle"> <widget class="QLabel" name="labelStyleHint">
<property name="orientation"> <property name="font">
<enum>Qt::Orientation::Horizontal</enum> <font>
<italic>true</italic>
</font>
</property> </property>
<property name="sizeHint" stdset="0"> </widget>
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="labelColorScheme"> <widget class="QLabel" name="labelColorScheme">

View file

@ -37,10 +37,6 @@
#include <QStyle> #include <QStyle>
#include <QStyleHints> #include <QStyleHints>
#ifdef Q_OS_WIN
#include <QOperatingSystemVersion>
#endif
#include "base/global.h" #include "base/global.h"
#include "base/logger.h" #include "base/logger.h"
#include "base/path.h" #include "base/path.h"
@ -88,9 +84,11 @@ UIThemeManager::UIThemeManager()
#endif #endif
{ {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
const QString defaultStyle = (QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows10) ? u"Fusion"_s : QString(); if (const QString styleName = Preferences::instance()->getStyle(); styleName.compare(u"system", Qt::CaseInsensitive) != 0)
if (const QString styleName = Preferences::instance()->getStyle(); !QApplication::setStyle(styleName.isEmpty() ? defaultStyle : styleName)) {
LogMsg(tr("Set app style failed. Unknown style: \"%1\"").arg(styleName), Log::WARNING); if (!QApplication::setStyle(styleName.isEmpty() ? u"Fusion"_s : styleName))
LogMsg(tr("Set app style failed. Unknown style: \"%1\"").arg(styleName), Log::WARNING);
}
#endif #endif
#ifdef QBT_HAS_COLORSCHEME_OPTION #ifdef QBT_HAS_COLORSCHEME_OPTION