【问题标题】:How can I find the selected item in a QTreeWidget?如何在 QTreeWidget 中找到所选项目?
【发布时间】:2010-09-24 23:57:43
【问题描述】:

我有一个继承 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();
    }
 }

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

【问题讨论】:

    标签: c++ qt events kde treewidget


    【解决方案1】:

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

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

    会给你选择的项目。

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

    【讨论】:

    • 是的,你是对的。它甚至在我链接到的文档中也这么说。不错的收获。
    【解决方案2】:

    使用 itemClicked() 信号将错过使用键盘所做的任何选择更改。我假设这对你来说是件坏事。

    【讨论】:

    • 完美,我只需要点击QTreeWidget :)
    【解决方案3】:

    你可以简单地使用这个:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        哎呀,我用这个解决了:

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

        不过感谢回复:D

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 2016-06-15
          • 1970-01-01
          • 2015-08-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多