gpt4 book ai didi

c++ - 如何使用 QTreeView 在 QComboBox 中选择项目

转载 作者:行者123 更新时间:2023-11-30 04:59:24 35 4
gpt4 key购买 nike

我试图在下面的代码中使用 QTreeView 从 QComboBox 中选择项目“leaf2”。

我只想通过代码从文本中选择没有子项的项目。 (如果有 child 则不可选)

如何选择没有子项的项或索引?

谁能帮我解决这个问题?

谢谢。

void Main::initView()
{
QStandardItemModel *model = new QStandardItemModel;
QStandardItem *root_item = model->invisibleRootItem();

// Build Model Items
QStandardItem *node_item = NULL;
node_item = new QStandardItem("Node");
node_item->setFlags(Qt::ItemIsEnabled);
root_item->appendRow(node_item);

QStandardItem *leaf_item = new QStandardItem("leaf1");
leaf_item ->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
node_item->appendRow(leaf_item );

leaf_item = new QStandardItem("leaf2");
leaf_item ->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
node_item->appendRow(leaf_item );

// Set Model to TreeViewComboBox
ui.cb_treevew->setModel(model);

ui.cb_treeview->setCurrentIndex(0); // "Node" is selected.
ui.cb_treeview->setCurrentIndex(1); // Nothing is selected.
ui.cb_treeview->setCurrentIndex(2); // Nothing is selected.
ui.cb_treeview->setCurrentIndex(3); // Nothing is selected.
}

这是我的 CTreeViewComboBox 代码。

CTreeViewComboBox::CTreeViewComboBox(QWidget *parent) : QComboBox(parent)
{
QTreeView* treeView = new QTreeView(this);
treeView->setEditTriggers(QTreeView::NoEditTriggers);
treeView->setSelectionBehavior(QTreeView::SelectRows);
treeView->setSelectionMode(QTreeView::SingleSelection);
treeView->setItemsExpandable(true);
treeView->header()->setVisible(false);
treeView->setWordWrap(true);
setView(treeView);
}

PS:我试过如下选择项目,但没有用。 :(

ui.cb_treeview->treeView()->setCurrentIndex(getModelIndexFromText("leaf2"));

最佳答案

如果有子节点的文本永远不会与没有子节点的文本相同,那么下面的方法是合适的。

QModelIndexList modelIndexes = model->match(
model->index(0, 0),
Qt::DisplayRole,
"leaf2",
-1,
Qt::MatchRecursive);
QModelIndex index = modelIndexes.first();
ui.cb_treeview.setRootModelIndex(index.parent());
ui.cb_treeview.setCurrentIndex(index.row());

另一方面,如果有 child 的节点可以和没有 child 的节点有相同的文本,你应该使用下面的方法。

QModelIndexList modelIndexes = model->match(
model->index(0, 0),
Qt::DisplayRole,
"leaf2",
-1,
Qt::MatchRecursive);

QModelIndexList::iterator tstIt = std::find_if(modelIndexes.begin(),
modelIndexes.end(),
[] (const QModelIndex & index) {
return !index.model()->hasChildren(index);
});

ui.cb_treeview.setRootModelIndex(tstIt->parent());
ui.cb_treeview.setCurrentIndex(tstIt->row());

在这两种情况下,我都假设没有 child 的节点总是有不同的文本。如果没有 child 的节点与名称匹配,请选择其中一个。

关于c++ - 如何使用 QTreeView 在 QComboBox 中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51231132/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com