diff --git a/src/yuzu/applets/controller.cpp b/src/yuzu/applets/controller.cpp
index 7482174c62..4783446a80 100644
--- a/src/yuzu/applets/controller.cpp
+++ b/src/yuzu/applets/controller.cpp
@@ -171,14 +171,14 @@ QtControllerSelectorDialog::QtControllerSelectorDialog(
         ui->checkboxPlayer7Connected, ui->checkboxPlayer8Connected,
     };
 
-    for (std::size_t i = 0; i < player_widgets.size(); ++i) {
+    for (std::size_t i = 0; i < NUM_PLAYERS; ++i) {
         connect(player_groupboxes[i], &QGroupBox::toggled, [this, i](bool checked) {
             if (checked) {
                 for (std::size_t index = 0; index <= i; ++index) {
                     connected_controller_checkboxes[index]->setChecked(checked);
                 }
             } else {
-                for (std::size_t index = i; index < player_widgets.size(); ++index) {
+                for (std::size_t index = i; index < NUM_PLAYERS; ++index) {
                     connected_controller_checkboxes[index]->setChecked(checked);
                 }
             }
@@ -237,6 +237,11 @@ QtControllerSelectorDialog::QtControllerSelectorDialog(
 QtControllerSelectorDialog::~QtControllerSelectorDialog() = default;
 
 void QtControllerSelectorDialog::ApplyConfiguration() {
+    // Update the controller state once more, just to be sure they are properly applied.
+    for (std::size_t index = 0; index < NUM_PLAYERS; ++index) {
+        UpdateControllerState(index);
+    }
+
     const bool pre_docked_mode = Settings::values.use_docked_mode;
     Settings::values.use_docked_mode = ui->radioDocked->isChecked();
     OnDockedModeChanged(pre_docked_mode, Settings::values.use_docked_mode);
@@ -281,7 +286,7 @@ void QtControllerSelectorDialog::CheckIfParametersMet() {
 
     // Next, check against all connected controllers.
     const auto all_controllers_compatible = [this] {
-        for (std::size_t index = 0; index < player_widgets.size(); ++index) {
+        for (std::size_t index = 0; index < NUM_PLAYERS; ++index) {
             // Skip controllers that are not used, we only care about the currently connected ones.
             if (!player_groupboxes[index]->isChecked() || !player_groupboxes[index]->isEnabled()) {
                 continue;
@@ -535,7 +540,7 @@ void QtControllerSelectorDialog::DisableUnsupportedPlayers() {
         break;
     }
 
-    for (std::size_t index = max_supported_players; index < player_widgets.size(); ++index) {
+    for (std::size_t index = max_supported_players; index < NUM_PLAYERS; ++index) {
         // Disconnect any unsupported players here and disable or hide them if applicable.
         Settings::values.players[index].connected = false;
         UpdateController(Settings::values.players[index].controller_type, index, false);
@@ -553,7 +558,7 @@ void QtControllerSelectorDialog::DisableUnsupportedPlayers() {
 }
 
 void QtControllerSelectorDialog::LoadConfiguration() {
-    for (std::size_t index = 0; index < player_widgets.size(); ++index) {
+    for (std::size_t index = 0; index < NUM_PLAYERS; ++index) {
         const auto connected = Settings::values.players[index].connected ||
                                (index == 0 && Settings::values.players[8].connected);
         player_groupboxes[index]->setChecked(connected);
diff --git a/src/yuzu/applets/controller.h b/src/yuzu/applets/controller.h
index db59dd631a..6ab4bea096 100644
--- a/src/yuzu/applets/controller.h
+++ b/src/yuzu/applets/controller.h
@@ -79,36 +79,38 @@ private:
     InputCommon::InputSubsystem* input_subsystem;
 
     // This is true if and only if all parameters are met. Otherwise, this is false.
-    // This determines whether the "Ok" button can be clicked to exit the applet.
+    // This determines whether the "OK" button can be clicked to exit the applet.
     bool parameters_met{false};
 
+    static constexpr std::size_t NUM_PLAYERS = 8;
+
     // Widgets encapsulating the groupboxes and comboboxes per player.
-    std::array<QWidget*, 8> player_widgets;
+    std::array<QWidget*, NUM_PLAYERS> player_widgets;
 
     // Groupboxes encapsulating the controller icons and LED patterns per player.
-    std::array<QGroupBox*, 8> player_groupboxes;
+    std::array<QGroupBox*, NUM_PLAYERS> player_groupboxes;
 
     // Icons for currently connected controllers/players.
-    std::array<QWidget*, 8> connected_controller_icons;
+    std::array<QWidget*, NUM_PLAYERS> connected_controller_icons;
 
     // Labels that represent the player numbers in place of the controller icons.
-    std::array<QLabel*, 8> player_labels;
+    std::array<QLabel*, NUM_PLAYERS> player_labels;
 
     // LED patterns for currently connected controllers/players.
-    std::array<std::array<QCheckBox*, 4>, 8> led_patterns_boxes;
+    std::array<std::array<QCheckBox*, 4>, NUM_PLAYERS> led_patterns_boxes;
 
     // Labels representing additional information known as "Explain Text" per player.
-    std::array<QLabel*, 8> explain_text_labels;
+    std::array<QLabel*, NUM_PLAYERS> explain_text_labels;
 
     // Comboboxes with a list of emulated controllers per player.
-    std::array<QComboBox*, 8> emulated_controllers;
+    std::array<QComboBox*, NUM_PLAYERS> emulated_controllers;
 
     // Labels representing the number of connected controllers
     // above the "Connected Controllers" checkboxes.
-    std::array<QLabel*, 8> connected_controller_labels;
+    std::array<QLabel*, NUM_PLAYERS> connected_controller_labels;
 
     // Checkboxes representing the "Connected Controllers".
-    std::array<QCheckBox*, 8> connected_controller_checkboxes;
+    std::array<QCheckBox*, NUM_PLAYERS> connected_controller_checkboxes;
 };
 
 class QtControllerSelector final : public QObject, public Core::Frontend::ControllerApplet {