How can I find the selected item in a QTreeWidget?

Giancarlo picture Giancarlo · Dec 2, 2008 · Viewed 27.5k times · Source

I have a class that inherits QTreeWidget. How can I find the currently selected row? Usually I connect signals to slots this way:

connect(myButton, SIGNAL(triggered(bool)), this, SLOT(myClick()));

However, I can't find anything similar for QTreeWidget->QTreeWidgetItem. The only way I found is to redefine the mousePressEvent of the QTreeWidget class like this:

void MyQTreeWidget::mousePressEvent(QMouseEvent *e){
    QTreeView::mousePressEvent(e);
    const QModelIndex index = indexAt(e->pos());
    if (!index.isValid())
    {
    const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers();
    if (!(modifiers & Qt::ShiftModifier) && !(modifiers & Qt::ControlModifier))
    clearSelection();
    }
 }

I didn't try it yet. Is the only solution or is there any easier way?

Answer

Thomas Watnedal picture Thomas Watnedal · Dec 2, 2008

Dusty is almost correct. But the itemSelectionChanged signal will not tell you which item is selected.

QList<QTreeWidgetItem *> QTreeWidget::selectedItems() const

will give you the selected item(s).

So, connect a slot to the itemSelectionChanged signal, then call selectedItems() on the tree widget to get the selected item(s).