Skip to content

Commit f159798

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

File tree

3 files changed

+77
-59
lines changed

3 files changed

+77
-59
lines changed

src/gui/optionsdialog.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,10 @@ void OptionsDialog::saveBehaviorTabOptions() const
456456
pref->setLocale(locale);
457457

458458
#ifdef Q_OS_WIN
459-
pref->setStyle(m_ui->comboStyle->currentText());
459+
if (const QVariant systemStyle = m_ui->comboStyle->currentData(); systemStyle.isValid())
460+
pref->setStyle(systemStyle.toString());
461+
else
462+
pref->setStyle(m_ui->comboStyle->currentText());
460463
#endif
461464

462465
#if (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS))
@@ -1689,17 +1692,27 @@ bool OptionsDialog::isSplashScreenDisabled() const
16891692
void OptionsDialog::initializeStyleCombo()
16901693
{
16911694
#ifdef Q_OS_WIN
1695+
m_ui->labelStyleHint->setText(tr("%1 is recommended for best compatibility with Windows dark mode"
1696+
, "Fusion is recommended for best compatibility with Windows dark mode").arg(u"Fusion"_s));
1697+
m_ui->comboStyle->addItem(tr("System", "System default Qt style"), u"system"_s);
1698+
m_ui->comboStyle->setItemData(0, tr("Let Qt decide the style for this system"), Qt::ToolTipRole);
1699+
m_ui->comboStyle->insertSeparator(1);
1700+
16921701
QStringList styleNames = QStyleFactory::keys();
16931702
std::sort(styleNames.begin(), styleNames.end(), Utils::Compare::NaturalLessThan<Qt::CaseInsensitive>());
16941703
m_ui->comboStyle->addItems(styleNames);
16951704
const QString prefStyleName = Preferences::instance()->getStyle();
16961705
const QString selectedStyleName = prefStyleName.isEmpty() ? QApplication::style()->name() : prefStyleName;
1697-
m_ui->comboStyle->setCurrentText(selectedStyleName);
1706+
1707+
if (selectedStyleName.compare(u"system"_s, Qt::CaseInsensitive) != 0)
1708+
m_ui->comboStyle->setCurrentText(selectedStyleName);
16981709
#else
16991710
m_ui->labelStyle->hide();
17001711
m_ui->comboStyle->hide();
1712+
m_ui->labelStyleHint->hide();
17011713
m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyle);
17021714
m_ui->UISettingsBoxLayout->removeWidget(m_ui->comboStyle);
1715+
m_ui->UISettingsBoxLayout->removeWidget(m_ui->labelStyleHint);
17031716
m_ui->UISettingsBoxLayout->removeItem(m_ui->spacerStyle);
17041717
#endif
17051718
}

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)