How to set the cursor to pointer when the mouse hovers over QTreeWidgetItem in a QTreeWidget?
-
-
@Limer
either you can install an eventFilter on the QTreeWidget and catch the mouse move/hover events, and check the index/item at the corresponding position using QTreeWidget::itemAt()/QTreeWidget::indexAt() and call setCursor() and unsetCursor() on leave event.Or you can sublcass QTreeWidget and follow the same pattern for the event filter.
-
I tried it,
bool MainWindow::eventFilter(QObject* watched, QEvent* event) { if (watched == m_treeWidget) { if (event->type() == QEvent::HoverMove) { QMouseEvent* e = static_cast<QMouseEvent*>(event); // qDebug() << e->globalPos(); if (m_treeWidget->itemAt(m_treeWidget->viewport()->mapFromGlobal(e->globalPos()))) m_treeWidget->setCursor(Qt::PointingHandCursor); else m_treeWidget->setCursor(Qt::ArrowCursor); return true; } } return QMainWindow::eventFilter(watched, event); }
But, it didn't work.
I printed the
pos()
, found that the position wouldn't vary when I moved the mouse. -
@Limer said in How to set the curtor to pointer when the mouse hovers over QTreeWidgetItem in a QTreeWidget?:
But, it didn't work.
more specifically?
Did the event filter get called at all?
Did you catch the HoverMove event?You can also try to install the event filter on the viewport() widget instead.
-
@raven-worx Maybe because the treewidget's parent is a qmainwindow, and i tried many ways to enable the mousetracking,but failed.
So , i subclass the qtreewidget, redefine the mouseMoveEvent ,and it successed.
Thanks a lot! ~
3/5