diff --git a/Source/Core/DolphinQt2/RenderWidget.cpp b/Source/Core/DolphinQt2/RenderWidget.cpp
index 3022e00ec2..fc28f92d69 100644
--- a/Source/Core/DolphinQt2/RenderWidget.cpp
+++ b/Source/Core/DolphinQt2/RenderWidget.cpp
@@ -3,6 +3,7 @@
 // Refer to the license.txt file included.
 
 #include <QKeyEvent>
+#include <QTimer>
 
 #include "DolphinQt2/Host.h"
 #include "DolphinQt2/RenderWidget.h"
@@ -19,9 +20,15 @@ RenderWidget::RenderWidget(QWidget* parent) : QWidget(parent)
   connect(this, &RenderWidget::HandleChanged, Host::GetInstance(), &Host::SetRenderHandle);
   emit HandleChanged((void*)winId());
 
+  m_mouse_timer = new QTimer(this);
+  connect(m_mouse_timer, &QTimer::timeout, this, &RenderWidget::HandleCursorTimer);
+  m_mouse_timer->setSingleShot(true);
+  setMouseTracking(true);
+
   connect(&Settings::Instance(), &Settings::HideCursorChanged, this,
           &RenderWidget::OnHideCursorChanged);
   OnHideCursorChanged();
+  m_mouse_timer->start(MOUSE_HIDE_DELAY);
 }
 
 void RenderWidget::OnHideCursorChanged()
@@ -29,6 +36,12 @@ void RenderWidget::OnHideCursorChanged()
   setCursor(Settings::Instance().GetHideCursor() ? Qt::BlankCursor : Qt::ArrowCursor);
 }
 
+void RenderWidget::HandleCursorTimer()
+{
+  if (isActiveWindow())
+    setCursor(Qt::BlankCursor);
+}
+
 bool RenderWidget::event(QEvent* event)
 {
   switch (event->type())
@@ -40,6 +53,14 @@ bool RenderWidget::event(QEvent* event)
       emit EscapePressed();
     break;
   }
+  case QEvent::MouseMove:
+  case QEvent::MouseButtonPress:
+    if (!Settings::Instance().GetHideCursor() && isActiveWindow())
+    {
+      setCursor(Qt::ArrowCursor);
+      m_mouse_timer->start(MOUSE_HIDE_DELAY);
+    }
+    break;
   case QEvent::WinIdChange:
     emit HandleChanged((void*)winId());
     break;
diff --git a/Source/Core/DolphinQt2/RenderWidget.h b/Source/Core/DolphinQt2/RenderWidget.h
index 0db0ee4d3c..11fadd348b 100644
--- a/Source/Core/DolphinQt2/RenderWidget.h
+++ b/Source/Core/DolphinQt2/RenderWidget.h
@@ -7,6 +7,8 @@
 #include <QEvent>
 #include <QWidget>
 
+class QTimer;
+
 class RenderWidget final : public QWidget
 {
   Q_OBJECT
@@ -24,5 +26,9 @@ signals:
   void StateChanged(bool fullscreen);
 
 private:
+  void HandleCursorTimer();
   void OnHideCursorChanged();
+
+  static constexpr int MOUSE_HIDE_DELAY = 3000;
+  QTimer* m_mouse_timer;
 };
diff --git a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp
index 84998ea13d..40b87a7b34 100644
--- a/Source/Core/DolphinQt2/Settings/InterfacePane.cpp
+++ b/Source/Core/DolphinQt2/Settings/InterfacePane.cpp
@@ -91,7 +91,7 @@ void InterfacePane::CreateInGame()
   m_checkbox_enable_osd = new QCheckBox(tr("Enable On Screen Messages"));
   m_checkbox_show_active_title = new QCheckBox(tr("Show Active Title in Window Title"));
   m_checkbox_pause_on_focus_lost = new QCheckBox(tr("Pause on Focus Loss"));
-  m_checkbox_hide_mouse = new QCheckBox(tr("Hide Mouse Cursor"));
+  m_checkbox_hide_mouse = new QCheckBox(tr("Always Hide Mouse Cursor"));
 
   groupbox_layout->addWidget(m_checkbox_confirm_on_stop);
   groupbox_layout->addWidget(m_checkbox_use_panic_handlers);