如何在QTreeWidget中找到所选项目?

7

我有一个继承自QTreeWidget的类。如何找到当前选中的行? 通常我会这样连接信号和槽:

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

然而,我找不到与 QTreeWidget->QTreeWidgetItem 相似的东西。 我所发现的唯一方法是重新定义 QTreeWidget 类的 mousePressEvent,如下所示:

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();
    }
 }

我还没有尝试过。这是唯一的解决方案吗?还是有更简单的方法?

5个回答

17

Dusty几乎正确。但是itemSelectionChanged信号不会告诉您选中了哪个项目。

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

将会给您选定的项目。

因此,连接一个插槽到itemSelectionChanged信号,然后调用tree widget上的selectedItems()函数以获取选定的项目。


是的,你说得对。我链接的文档中甚至都这么写着。很好的发现。 - Dusty Campbell

4
使用itemClicked()信号会忽略使用键盘进行的任何选择更改。我假设在您的情况下这是不好的事情。

完美了,我只需要点击 QTreeWidget :) - JuanDeLosMuertos

3
你可以简单地使用以下内容:
QString word = treeWidget->currentItem()->text(treeWidget->currentColumn());

将文本存入变量word中。


1
根据这里的文档,您应该将QTreeWidget itemSelectionChanged()信号连接到您类中的一个槽。这将告诉您选择了哪个QTreeWidgetItem,我认为这正是您想要的。

0

哎呀,我简单地使用了这个解决了:

connect(this,SIGNAL(itemClicked(QTreeWidgetItem*, int)), SLOT(mySlot()));

不过还是谢谢大家的回复 :D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接