Qt 如何获取存储指向外部模型的指针的模型的QModelIndex
我有一个模型,包含两个来自两个不同浏览器的书签节点列表(每个节点包含名称和可能的url)Qt 如何获取存储指向外部模型的指针的模型的QModelIndex,qt,match,qtreeview,qabstractitemmodel,qmodelindex,Qt,Match,Qtreeview,Qabstractitemmodel,Qmodelindex,我有一个模型,包含两个来自两个不同浏览器的书签节点列表(每个节点包含名称和可能的url) 类书签\u节点{ QString名称, QString url, 书签_节点*父节点} 书签列表: std::矢量书签列表_1 标准::矢量书签列表2 这个模型还有一个比较方法,可以找出哪些书签只包含在其中一个书签列表中。因此,我在模型中有两个附加列表: std::vectorbookmarkOnlyInList\u 1 std::vectorbookmarkOnlyInList_2 对于Qt,我使用
类书签\u节点{
QString名称,
QString url,
书签_节点*父节点}
书签列表:
std::矢量书签列表_1
标准::矢量书签列表2
这个模型还有一个比较方法,可以找出哪些书签只包含在其中一个书签列表中。因此,我在模型中有两个附加列表:
std::vectorbookmarkOnlyInList\u 1
std::vectorbookmarkOnlyInList_2
对于Qt,我使用2qtreeview显示bookmarkList_1和bookmarkList_2,其中QModelIndex在内部指向Bookmark_节点
现在,由于我有bookmarkOnlyInList\u 1/bookmarkOnlyInList\u 1,我想通过给定的整数变量滚动到Bookmark\u节点(例如bookmarkOnlyInList\u 1中的第三个唯一Bookmark\u节点)
为了在树视图中找到QModelIndex,我尝试使用qabstractem::match()
但我迷路了:
如何将startIndex(第一个参数)设置为树的顶级根
如何将我的书签节点指针传递到QVariant(第三个参数)
或者更一般地说:如何获取QModelIndex以传递给QTreeView::scrollTo,并具有内部指针Bookmark\u节点指针
我可以通过QModelIndices来丰富bookmarkinonlyinlist_1/2,但这会将模型与视图混合在一起,这是我想要避免的。
有什么建议吗
更多信息:
当程序启动时,它看起来像:
按下按钮后,它应该搜索“Mike”并展开此节点,如下图所示。问题是,它没有展开。
如果我扩展所有内容,我将得到完整的模型:
下面是启动按钮后将运行的代码。
行QModelIndexList包含Mike的QModelIndex,但行和计数设置为零。这可能是问题的原因
void MainWindow::on_pushButton_clicked()
{
TreeNode::T_Ptr tn = model->root();
TreeNode* searchNode = tn->child(1)->child(1).get();// Should be Mike
qDebug() << "SearchNode = "
<< QString::fromStdString(searchNode->name());
QModelIndex start = model->index(0, 0);
QVariant dat = QVariant(QString::fromStdString(searchNode->name()));
QModelIndexList l = model->match(start, Qt::DisplayRole,
dat, 10,
Qt::MatchRecursive);
for (QModelIndex i : l) {
qDebug() << "Row = " << i.row() << " Column = " << i.column();
TreeNode* s = static_cast<TreeNode*>(i.internalPointer());
qDebug() << "Search Name = " << QString::fromStdString(s->name());
if (s == searchNode) {
qDebug() << "From Model = " << QString::fromStdString(s->name());
ui->treeView->expand(i);
qDebug() << "expanded = " << ui->treeView->isExpanded(i);
// ui->treeView->expandAll();
ui->treeView->scrollTo(i, QAbstractItemView::EnsureVisible);
}
}
}
void主窗口::在按钮上点击()
{
树节点::T_Ptr tn=model->root();
TreeNode*searchNode=tn->child(1)->child(1).get();//应该是Mike
qDebug()索引(0,0);
QVariant dat=QVariant(QString::fromStdString(searchNode->name());
QModelIndexList l=model->match(开始,Qt::DisplayRole,
dat,10,
Qt::匹配(递归);
对于(QModelIndex i:l){
qDebug()滚动到(i,QAbstractItemView::EnsureRevible);
}
}
}
你可以制作一个模拟GUI屏幕截图来向我们展示你想要它的样子吗?@马丁:我添加了更多信息。你可以制作一个模拟GUI屏幕截图来向我们展示你想要它的样子吗?@马丁:我添加了更多信息