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

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

4

5 回答 5

17

尘土飞扬的几乎是正确的。但是 itemSelectionChanged 信号不会告诉您选择了哪个项目。

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

将为您提供所选项目。

因此,将插槽连接到 itemSelectionChanged 信号,然后在树小部件上调用 selectedItems() 以获取所选项目。

于 2008-12-02T19:44:46.293 回答
4

使用 itemClicked() 信号将错过使用键盘所做的任何选择更改。我假设在你的情况下这是一件坏事。

于 2008-12-05T15:55:22.103 回答
3

你可以简单地使用这个:

QString word = treeWidget->currentItem()->text(treeWidget->currentColumn());

在变量词中获取您的文本。

于 2015-04-06T14:57:28.427 回答
1

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

于 2008-12-02T19:37:43.123 回答
0

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

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

但是感谢您的回复:D

于 2008-12-02T19:56:40.637 回答