Skip to content

Commit 6fc93fe

Browse files
Allow to use Qt's default QStyle
Relevant prior PR qbittorrent#21553
1 parent fb40275 commit 6fc93fe

File tree

3 files changed

+79
-59
lines changed

3 files changed

+79
-59
lines changed

src/gui/optionsdialog.cpp

+17-2
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,10 @@ void OptionsDialog::loadBehaviorTabOptions()
244244

245245
initializeStyleCombo();
246246

247+
#ifdef Q_OS_WIN
248+
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));
249+
#endif
250+
247251
m_ui->checkUseCustomTheme->setChecked(Preferences::instance()->useCustomUITheme());
248252
m_ui->customThemeFilePath->setSelectedPath(Preferences::instance()->customUIThemePath());
249253
m_ui->customThemeFilePath->setMode(FileSystemPathEdit::Mode::FileOpen);
@@ -456,7 +460,10 @@ void OptionsDialog::saveBehaviorTabOptions() const
456460
pref->setLocale(locale);
457461

458462
#ifdef Q_OS_WIN
459-
pref->setStyle(m_ui->comboStyle->currentText());
463+
if (const QVariant systemStyle = m_ui->comboStyle->currentData(); systemStyle.isValid())
464+
pref->setStyle(systemStyle.toString());
465+
else
466+
pref->setStyle(m_ui->comboStyle->currentText());
460467
#endif
461468

462469
#if (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS))
@@ -1689,17 +1696,25 @@ bool OptionsDialog::isSplashScreenDisabled() const
16891696
void OptionsDialog::initializeStyleCombo()
16901697
{
16911698
#ifdef Q_OS_WIN
1699+
m_ui->comboStyle->addItem(tr("System", "System default Qt style"), u"system"_s);
1700+
m_ui->comboStyle->setItemData(0, tr("Let Qt decide the style for this system"), Qt::ToolTipRole);
1701+
m_ui->comboStyle->insertSeparator(0);
1702+
16921703
QStringList styleNames = QStyleFactory::keys();
16931704
std::sort(styleNames.begin(), styleNames.end(), Utils::Compare::NaturalLessThan<Qt::CaseInsensitive>());
16941705
m_ui->comboStyle->addItems(styleNames);
16951706
const QString prefStyleName = Preferences::instance()->getStyle();
16961707
const QString selectedStyleName = prefStyleName.isEmpty() ? QApplication::style()->name() : prefStyleName;
1697-
m_ui->comboStyle->setCurrentText(selectedStyleName);
1708+
1709+
if (selectedStyleName.compare(u"system"_s, Qt::CaseInsensitive) != 0)
1710+
m_ui->comboStyle->setCurrentText(selectedStyleName);
16981711
#else
16991712
m_ui->labelStyle->hide();
17001713
m_ui->comboStyle->hide();
1714+
m_ui->labelStyleHint->hide();
17011715
m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyle);
17021716
m_ui->UISettingsBoxLayout->removeWidget(m_ui->comboStyle);
1717+
m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyleHint);
17031718
m_ui->UISettingsBoxLayout->removeItem(m_ui->spacerStyle);
17041719
#endif
17051720
}

src/gui/optionsdialog.ui

+57-50
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
<x>0</x>
124124
<y>0</y>
125125
<width>504</width>
126-
<height>1064</height>
126+
<height>1147</height>
127127
</rect>
128128
</property>
129129
<layout class="QVBoxLayout" name="verticalLayout_9">
@@ -133,17 +133,8 @@
133133
<string>Interface</string>
134134
</property>
135135
<layout class="QGridLayout" name="UISettingsBoxLayout">
136-
<item row="0" column="0" colspan="3">
137-
<widget class="QLabel" name="labelRestartRequired">
138-
<property name="font">
139-
<font>
140-
<italic>true</italic>
141-
</font>
142-
</property>
143-
<property name="text">
144-
<string>Changing Interface settings requires application restart</string>
145-
</property>
146-
</widget>
136+
<item row="2" column="1">
137+
<widget class="QComboBox" name="comboStyle"/>
147138
</item>
148139
<item row="1" column="0">
149140
<widget class="QLabel" name="labelLanguage">
@@ -152,10 +143,36 @@
152143
</property>
153144
</widget>
154145
</item>
155-
<item row="1" column="1">
156-
<widget class="QComboBox" name="comboLanguage"/>
146+
<item row="4" column="0" colspan="2">
147+
<widget class="QCheckBox" name="checkUseSystemIcon">
148+
<property name="text">
149+
<string>Use icons from system theme</string>
150+
</property>
151+
</widget>
157152
</item>
158-
<item row="1" column="2">
153+
<item row="3" column="0" colspan="4">
154+
<widget class="QGroupBox" name="checkUseCustomTheme">
155+
<property name="title">
156+
<string>Use custom UI Theme</string>
157+
</property>
158+
<property name="checkable">
159+
<bool>true</bool>
160+
</property>
161+
<layout class="QHBoxLayout" name="horizontalLayout_18">
162+
<item>
163+
<widget class="QLabel" name="label_16">
164+
<property name="text">
165+
<string>UI Theme file:</string>
166+
</property>
167+
</widget>
168+
</item>
169+
<item>
170+
<widget class="FileSystemPathLineEdit" name="customThemeFilePath" native="true"/>
171+
</item>
172+
</layout>
173+
</widget>
174+
</item>
175+
<item row="1" column="3">
159176
<spacer name="spacerLanguage">
160177
<property name="orientation">
161178
<enum>Qt::Orientation::Horizontal</enum>
@@ -175,10 +192,29 @@
175192
</property>
176193
</widget>
177194
</item>
178-
<item row="2" column="1">
179-
<widget class="QComboBox" name="comboStyle"/>
195+
<item row="0" column="0" colspan="4">
196+
<widget class="QLabel" name="labelRestartRequired">
197+
<property name="font">
198+
<font>
199+
<italic>true</italic>
200+
</font>
201+
</property>
202+
<property name="text">
203+
<string>Changing Interface settings requires application restart</string>
204+
</property>
205+
</widget>
180206
</item>
181-
<item row="2" column="2">
207+
<item row="5" column="0" colspan="2">
208+
<widget class="QPushButton" name="buttonCustomizeUITheme">
209+
<property name="text">
210+
<string>Customize UI Theme...</string>
211+
</property>
212+
</widget>
213+
</item>
214+
<item row="1" column="1">
215+
<widget class="QComboBox" name="comboLanguage"/>
216+
</item>
217+
<item row="2" column="3">
182218
<spacer name="spacerStyle">
183219
<property name="orientation">
184220
<enum>Qt::Orientation::Horizontal</enum>
@@ -191,39 +227,10 @@
191227
</property>
192228
</spacer>
193229
</item>
194-
<item row="3" column="0" colspan="3">
195-
<widget class="QGroupBox" name="checkUseCustomTheme">
196-
<property name="title">
197-
<string>Use custom UI Theme</string>
198-
</property>
199-
<property name="checkable">
200-
<bool>true</bool>
201-
</property>
202-
<layout class="QHBoxLayout" name="horizontalLayout_18">
203-
<item>
204-
<widget class="QLabel" name="label_16">
205-
<property name="text">
206-
<string>UI Theme file:</string>
207-
</property>
208-
</widget>
209-
</item>
210-
<item>
211-
<widget class="FileSystemPathLineEdit" name="customThemeFilePath" native="true"/>
212-
</item>
213-
</layout>
214-
</widget>
215-
</item>
216-
<item row="4" column="0" colspan="2">
217-
<widget class="QCheckBox" name="checkUseSystemIcon">
218-
<property name="text">
219-
<string>Use icons from system theme</string>
220-
</property>
221-
</widget>
222-
</item>
223-
<item row="5" column="0" colspan="2">
224-
<widget class="QPushButton" name="buttonCustomizeUITheme">
230+
<item row="2" column="2">
231+
<widget class="QLabel" name="labelStyleHint">
225232
<property name="text">
226-
<string>Customize UI Theme...</string>
233+
<string notr="true">labelStyleHint</string>
227234
</property>
228235
</widget>
229236
</item>

src/gui/uithememanager.cpp

+5-7
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@
3737
#include <QStyle>
3838
#include <QStyleHints>
3939

40-
#ifdef Q_OS_WIN
41-
#include <QOperatingSystemVersion>
42-
#endif
43-
4440
#include "base/global.h"
4541
#include "base/logger.h"
4642
#include "base/path.h"
@@ -85,9 +81,11 @@ UIThemeManager::UIThemeManager()
8581
#endif
8682
{
8783
#ifdef Q_OS_WIN
88-
const QString defaultStyle = (QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows10) ? u"Fusion"_s : QString();
89-
if (const QString styleName = Preferences::instance()->getStyle(); !QApplication::setStyle(styleName.isEmpty() ? defaultStyle : styleName))
90-
LogMsg(tr("Set app style failed. Unknown style: \"%1\"").arg(styleName), Log::WARNING);
84+
if (const QString styleName = Preferences::instance()->getStyle(); styleName.compare(u"system", Qt::CaseInsensitive) != 0)
85+
{
86+
if (!QApplication::setStyle(styleName.isEmpty() ? u"Fusion"_s : styleName))
87+
LogMsg(tr("Set app style failed. Unknown style: \"%1\"").arg(styleName), Log::WARNING);
88+
}
9189
#endif
9290

9391
// NOTE: Qt::QueuedConnection can be omitted as soon as support for Qt 6.5 is dropped

0 commit comments

Comments
 (0)