Qt: Use nested layouts in controller settings dialog

Gets rid of the gaps but doesn't require rearranging.
This commit is contained in:
Stenzek
2026-01-17 21:45:12 +10:00
parent 9c9bd21c30
commit 2c77eabe3a
2 changed files with 337 additions and 327 deletions

View File

@@ -77,12 +77,12 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
ControllerSettingWidgetBinder::BindWidgetToInputProfileBool(sif, m_ui.enableRawInput, "InputSources", "RawInput",
false);
#else
m_ui.mainLayout->removeWidget(m_ui.xinputGroup);
m_ui.groupsLayout->removeWidget(m_ui.xinputGroup);
QtUtils::SafeDeleteWidget(m_ui.xinputGroup);
m_ui.xinputLayout = nullptr;
m_ui.enableXInputSource = nullptr;
m_ui.xinputDescription = nullptr;
m_ui.mainLayout->removeWidget(m_ui.dinputGroup);
m_ui.groupsLayout->removeWidget(m_ui.dinputGroup);
QtUtils::SafeDeleteWidget(m_ui.dinputGroup);
m_ui.dinputLayout = nullptr;
m_ui.enableDInputSource = nullptr;
@@ -109,7 +109,7 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
}
else
{
m_ui.mainLayout->removeWidget(m_ui.sdlGroup);
m_ui.groupsLayout->removeWidget(m_ui.sdlGroup);
QtUtils::SafeDeleteWidget(m_ui.sdlGroup);
m_ui.sdlGridLayout = nullptr;
m_ui.sdlLEDLayout = nullptr;
@@ -119,17 +119,17 @@ ControllerGlobalSettingsWidget::ControllerGlobalSettingsWidget(QWidget* parent,
m_ui.enableSDLEnhancedMode = nullptr;
m_ui.sdlHelpText = nullptr;
m_ui.enableTouchPadAsPointer = nullptr;
m_ui.mainLayout->removeWidget(m_ui.xinputGroup);
m_ui.groupsLayout->removeWidget(m_ui.xinputGroup);
QtUtils::SafeDeleteWidget(m_ui.xinputGroup);
m_ui.xinputLayout = nullptr;
m_ui.enableXInputSource = nullptr;
m_ui.xinputDescription = nullptr;
m_ui.mainLayout->removeWidget(m_ui.dinputGroup);
m_ui.groupsLayout->removeWidget(m_ui.dinputGroup);
QtUtils::SafeDeleteWidget(m_ui.dinputGroup);
m_ui.dinputLayout = nullptr;
m_ui.enableDInputSource = nullptr;
m_ui.dinputDescription = nullptr;
m_ui.mainLayout->removeWidget(m_ui.pointerGroup);
m_ui.groupsLayout->removeWidget(m_ui.pointerGroup);
QtUtils::SafeDeleteWidget(m_ui.pointerGroup);
m_ui.pointerLayout = nullptr;
m_ui.pointerDescription = nullptr;

View File

@@ -10,7 +10,7 @@
<height>658</height>
</rect>
</property>
<layout class="QGridLayout" name="mainLayout" columnstretch="1,0">
<layout class="QHBoxLayout" name="mainLayout" stretch="1,0">
<property name="leftMargin">
<number>0</number>
</property>
@@ -23,366 +23,376 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QGroupBox" name="sdlGroup">
<property name="title">
<string>SDL Input Source</string>
</property>
<layout class="QGridLayout" name="sdlGridLayout">
<item row="2" column="1">
<layout class="QHBoxLayout" name="sdlLEDLayout">
<item>
<widget class="QCheckBox" name="enableSDLPS5PlayerLED">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<layout class="QVBoxLayout" name="groupsLayout">
<item>
<widget class="QGroupBox" name="sdlGroup">
<property name="title">
<string>SDL Input Source</string>
</property>
<layout class="QGridLayout" name="sdlGridLayout">
<item row="2" column="1">
<layout class="QHBoxLayout" name="sdlLEDLayout">
<item>
<widget class="QCheckBox" name="enableSDLPS5PlayerLED">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Enables the player LED on DualSense controllers.</string>
</property>
<property name="text">
<string>Enable DualSense Player LED</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="ledSettings">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Adjusts LED settings for controllers with configurable LEDs.</string>
</property>
<property name="icon">
<iconset theme="lightbulb-line"/>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="enableSDLSource">
<property name="toolTip">
<string>Enables the player LED on DualSense controllers.</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enables the SDL input source and detection of controllers.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Enable DualSense Player LED</string>
<string>Enable SDL Input Source</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="ledSettings">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item row="1" column="1">
<widget class="QCheckBox" name="enableSDLEnhancedMode">
<property name="toolTip">
<string>Adjusts LED settings for controllers with configurable LEDs.</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Allows rumble and LED effects for DualShock 4 / DualSense controllers in Bluetooth mode. This option is not required for wired connections.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:700;&quot;&gt;Enabling enhanced reports may result in your controller being unusable in other applications until it is turned off and on again.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="icon">
<iconset theme="lightbulb-line"/>
<property name="text">
<string>DualShock 4 / DualSense Enhanced Mode (Bluetooth Only)</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="sdlHelpText">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The SDL input source supports most controllers, and is the preferred option. Enhanced mode may be required for the Vibration/LED functionality of DualShock 4 / DualSense pads in Bluetooth mode. You can also edit &lt;a href=&quot;ADVANCED_SDL_OPTIONS&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#99ebff;&quot;&gt;advanced options&lt;/span&gt;&lt;/a&gt; which control device-specific behavior.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="enableTouchPadAsPointer">
<property name="toolTip">
<string>Allows use of the touchpad for DualShock 4 / DualSense controllers.</string>
</property>
<property name="text">
<string>Enable Touchpad</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="enableSDLSource">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enables the SDL input source and detection of controllers.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Enable SDL Input Source</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="enableSDLEnhancedMode">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Allows rumble and LED effects for DualShock 4 / DualSense controllers in Bluetooth mode. This option is not required for wired connections.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot; font-weight:700;&quot;&gt;Enabling enhanced reports may result in your controller being unusable in other applications until it is turned off and on again.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>DualShock 4 / DualSense Enhanced Mode (Bluetooth Only)</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="sdlHelpText">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The SDL input source supports most controllers, and is the preferred option. Enhanced mode may be required for the Vibration/LED functionality of DualShock 4 / DualSense pads in Bluetooth mode. You can also edit &lt;a href=&quot;ADVANCED_SDL_OPTIONS&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#99ebff;&quot;&gt;advanced options&lt;/span&gt;&lt;/a&gt; which control device-specific behavior.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="enableTouchPadAsPointer">
<property name="toolTip">
<string>Allows use of the touchpad for DualShock 4 / DualSense controllers.</string>
</property>
<property name="text">
<string>Enable Touchpad</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="xinputGroup">
<property name="title">
<string>XInput Source</string>
</property>
<layout class="QGridLayout" name="xinputLayout">
<item row="0" column="0">
<widget class="QLabel" name="xinputDescription">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The XInput source provides support for controllers that use the XInput protocol. This source should &lt;span style=&quot; font-weight:700;&quot;&gt;only&lt;/span&gt; be used if you are using a XInput wrapper library.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="enableXInputSource">
<property name="text">
<string>Enable XInput Source</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QGroupBox" name="dinputGroup">
<property name="title">
<string>DirectInput Source</string>
</property>
<layout class="QGridLayout" name="dinputLayout">
<item row="0" column="0">
<widget class="QLabel" name="dinputDescription">
<property name="text">
<string>The DirectInput source provides support for legacy controllers which do not support XInput. Accessing these controllers via SDL is recommended instead.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="enableDInputSource">
<property name="text">
<string>Enable DirectInput Source</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QGroupBox" name="pointerGroup">
<property name="title">
<string>Mouse/Pointer Source</string>
</property>
<layout class="QGridLayout" name="pointerLayout" columnstretch="0,1">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="pointerDescription">
<property name="text">
<string>Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="pointerXScaleDescription">
<property name="text">
<string>Horizontal Sensitivity:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="pointerXScaleLayout">
<item>
<widget class="QSlider" name="pointerXScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</widget>
</item>
<item>
<widget class="QGroupBox" name="xinputGroup">
<property name="title">
<string>XInput Source</string>
</property>
<layout class="QGridLayout" name="xinputLayout">
<item row="0" column="0">
<widget class="QLabel" name="xinputDescription">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The XInput source provides support for controllers that use the XInput protocol. This source should &lt;span style=&quot; font-weight:700;&quot;&gt;only&lt;/span&gt; be used if you are using a XInput wrapper library.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>30</number>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pointerXScaleLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
<item row="1" column="0">
<widget class="QCheckBox" name="enableXInputSource">
<property name="text">
<string>10</string>
<string>Enable XInput Source</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="pointerYScaleDescription">
<property name="text">
<string>Vertical Sensitivity:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="pointerYScaleLayout">
<item>
<widget class="QSlider" name="pointerYScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</widget>
</item>
<item>
<widget class="QGroupBox" name="dinputGroup">
<property name="title">
<string>DirectInput Source</string>
</property>
<layout class="QGridLayout" name="dinputLayout">
<item row="0" column="0">
<widget class="QLabel" name="dinputDescription">
<property name="text">
<string>The DirectInput source provides support for legacy controllers which do not support XInput. Accessing these controllers via SDL is recommended instead.</string>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>30</number>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pointerYScaleLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
<item row="1" column="0">
<widget class="QCheckBox" name="enableDInputSource">
<property name="text">
<string>10</string>
<string>Enable DirectInput Source</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0" colspan="2">
<layout class="QHBoxLayout" name="pointerOptionsLayout">
<item>
<widget class="QCheckBox" name="enableMouseMapping">
<property name="toolTip">
<string>Allows the mouse to be mapped to emulated controls. By default movement of the mouse will be ignored.</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="pointerGroup">
<property name="title">
<string>Mouse/Pointer Source</string>
</property>
<layout class="QGridLayout" name="pointerLayout" columnstretch="0,1">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="pointerDescription">
<property name="text">
<string>Enable Mouse Mapping</string>
<string>Using raw input improves precision when you bind controller sticks to the mouse pointer. Also enables multiple mice to be used.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enableRawInput">
<property name="toolTip">
<string>Uses raw input for mice input. Enable if you wish to use multiple mice/lightguns.</string>
</property>
<item row="1" column="0">
<widget class="QLabel" name="pointerXScaleDescription">
<property name="text">
<string>Use Raw Input</string>
<string>Horizontal Sensitivity:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="pointerXScaleLayout">
<item>
<widget class="QSlider" name="pointerXScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>30</number>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pointerXScaleLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>10</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="pointerYScaleDescription">
<property name="text">
<string>Vertical Sensitivity:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="pointerYScaleLayout">
<item>
<widget class="QSlider" name="pointerYScale">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>30</number>
</property>
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pointerYScaleLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>10</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0" colspan="2">
<layout class="QHBoxLayout" name="pointerOptionsLayout">
<item>
<widget class="QCheckBox" name="enableMouseMapping">
<property name="toolTip">
<string>Allows the mouse to be mapped to emulated controls. By default movement of the mouse will be ignored.</string>
</property>
<property name="text">
<string>Enable Mouse Mapping</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enableRawInput">
<property name="toolTip">
<string>Uses raw input for mice input. Enable if you wish to use multiple mice/lightguns.</string>
</property>
<property name="text">
<string>Use Raw Input</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="multitapGroup">
<property name="title">
<string>Controller Multitap</string>
</property>
<layout class="QGridLayout" name="multitapLayout" columnstretch="0,1">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="multitapDescription">
<property name="text">
<string>The multitap enables up to 8 controllers to be connected to the console. Each multitap provides 4 ports. Multitap is not supported by all games.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="multitapModeLabel">
<property name="text">
<string>Multitap Mode:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="multitapMode"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="profileSettings">
<property name="title">
<string>Profile Settings</string>
</property>
<layout class="QGridLayout" name="profileSettingsLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="profileSettingsDescription">
<property name="text">
<string>When these options are enabled, input sources and hotkeys can be set in this input profile, and will be used instead of the global source/hotkey configuration. By default, sources and hotkeys are always shared between all profiles.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="useProfileInputSources">
<property name="text">
<string>Use Profile Input Sources</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="useProfileHotkeyBindings">
<property name="text">
<string>Use Profile Hotkeys</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="4" column="0">
<widget class="QGroupBox" name="multitapGroup">
<property name="title">
<string>Controller Multitap</string>
</property>
<layout class="QGridLayout" name="multitapLayout" columnstretch="0,1">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="multitapDescription">
<property name="text">
<string>The multitap enables up to 8 controllers to be connected to the console. Each multitap provides 4 ports. Multitap is not supported by all games.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="multitapModeLabel">
<property name="text">
<string>Multitap Mode:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="multitapMode"/>
</item>
</layout>
</widget>
</item>
<item row="5" column="0">
<widget class="QGroupBox" name="profileSettings">
<property name="title">
<string>Profile Settings</string>
</property>
<layout class="QGridLayout" name="profileSettingsLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="profileSettingsDescription">
<property name="text">
<string>When these options are enabled, input sources and hotkeys can be set in this input profile, and will be used instead of the global source/hotkey configuration. By default, sources and hotkeys are always shared between all profiles.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="useProfileInputSources">
<property name="text">
<string>Use Profile Input Sources</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="useProfileHotkeyBindings">
<property name="text">
<string>Use Profile Hotkeys</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
</spacer>
</item>
<item row="0" column="1" rowspan="7">
<item>
<widget class="QGroupBox" name="deviceListGroup">
<property name="title">
<string>Detected Devices</string>