Browse Source

mouse tracking for actions

Sonnix 6 years ago
parent
commit
d8d3bba16f
3 changed files with 27 additions and 0 deletions
  1. 1 0
      mainwindow.cpp
  2. 22 0
      qsplistbox.cpp
  3. 4 0
      qsplistbox.h

+ 1 - 0
mainwindow.cpp

@@ -611,6 +611,7 @@ void MainWindow::CreateDockWindows()
     connect(_actionsListBox, SIGNAL(itemPressed(QListWidgetItem *)), this, SLOT(OnActionsListBoxItemClicked(QListWidgetItem *)));
     connect(_actionsListBox, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(OnActionsListBoxItemClicked(QListWidgetItem *)));
     connect(_actionsListBox, SIGNAL(SelectionChange(int)), this, SLOT(OnActionChange(int)));
+    _actionsListBox->SetMouseTracking(true);
     _actionsWidget->setWidget(_actionsListBox);
 
     // "Additional desc" widget

+ 22 - 0
qsplistbox.cpp

@@ -30,6 +30,7 @@ QspListBox::QspListBox(QWidget *parent) : QListWidget(parent)
     m_selectionColor = palette().color(QPalette::Highlight);
     m_font = font();
     oldSelection = -1;
+    m_mouseTracking = false;
 }
 
 QspListBox::~QspListBox()
@@ -179,6 +180,12 @@ void QspListBox::SetShowPlainText(bool isPlain)
     RefreshUI();
 }
 
+void QspListBox::SetMouseTracking(bool trackMouse)
+{
+    m_mouseTracking = trackMouse;
+    viewport()->setMouseTracking(trackMouse);
+}
+
 void QspListBox::createList()
 {
     //clear(); //NOTE: clear() only deletes items but does not delete the widgets belonging to it. The widgets will be deleted if the QListWidget is deleted.
@@ -200,6 +207,8 @@ void QspListBox::createList()
         item_widget = new QspTextBox(this);
         //item_widget->setFrameStyle(QFrame::Box);
         item_widget->setLineWidth(0);
+        item_widget->viewport()->setMouseTracking(false);
+        item_widget->setAttribute(Qt::WA_TransparentForMouseEvents);
 
         item_widget->SetIsHtml(m_isUseHtml);
         item_widget->SetShowPlainText(showPlainText);
@@ -339,3 +348,16 @@ void QspListBox::resizeEvent(QResizeEvent *e)
     }
     QListWidget::resizeEvent(e);
 }
+
+void QspListBox::mouseMoveEvent(QMouseEvent *event)
+{
+    if(m_mouseTracking)
+    {
+        QListWidgetItem *curItem = itemAt(event->pos());
+        if (curItem != 0)
+        {
+            SetSelection(row(curItem));
+        }
+    }
+    QListWidget::mouseMoveEvent(event);
+}

+ 4 - 0
qsplistbox.h

@@ -8,6 +8,7 @@
 #include <QFont>
 #include <QColor>
 #include <QResizeEvent>
+#include <QMouseEvent>
 
 namespace Ui {
 class QspListBox;
@@ -45,12 +46,14 @@ public:
     void SetSelection(int selection);
     int GetSelection() { return oldSelection; }
     void SetShowPlainText(bool isPlain);
+    void SetMouseTracking(bool trackMouse);
 
 private:
     // Internal methods
     void createList();
     QString formatItem(int itemIndex);
     void resizeEvent(QResizeEvent *e);
+    void mouseMoveEvent(QMouseEvent *event);
 
     // Fields
     QString m_outFormat;
@@ -69,6 +72,7 @@ private:
     QColor m_textColor;
     QColor m_backgroundColor;
     QColor m_selectionColor;
+    bool m_mouseTracking;
     bool showPlainText;
     int oldSelection;
 };