QTreeWidget避免默认选择新项目

时间:2019-06-28 07:28:36

标签: qt

因此QTreeWidget似乎默认选择插入其中的最新项。有办法避免这种行为吗?我查看了文档,但找不到任何东西。相反,我将重点放在插入QTreeWidget的第一个项目上。

这就是我将东西插入树的方式

void insertIntoTree(QTreeWidget *tree)
for (int i = 0; i < streams.count(); i++) {
            tree->setSelectionMode(QAbstractItemView::SingleSelection);
            quint64 key = streams.keys().at(i);
            const StreamInfo &info = streams.value(key);

            QTreeWidgetItem* parent = makeItem(StreamId::calcName(key), true);
            tree->addTopLevelItem(parent);
            parent->setSelected(true);
}
}

1 个答案:

答案 0 :(得分:2)

我通过创建一个最小可重现的示例进行了尝试,但无法重现您的行为。如果必须显式设置所选项目,如果我想实现您描述的行为。

我建议您学习如何创建最小可复制的示例,这确实很有趣,并且在大多数情况下,它们很小且写得很快。

#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QTreeWidget>

int main(int argc, char** args) {
    QApplication app(argc, args);
    auto frame = new QFrame;
    frame->setLayout(new QVBoxLayout);
    auto widget = new QTreeWidget;
    auto btn = new QPushButton("Add");
    frame->layout()->addWidget(widget);
    frame->layout()->addWidget(btn);
    btn->connect(btn, &QPushButton::clicked, [&]()  {
        auto item = new QTreeWidgetItem;
        item->setData(0, Qt::ItemDataRole::DisplayRole, "Item");
        widget->addTopLevelItem(item);
        // item->setSelected(true); // Order ist important to active selection
    });
    frame->show();
    app.exec();
}
相关问题