因此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);
}
}
答案 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();
}