Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何获取存储指向外部模型的指针的模型的QModelIndex_Qt_Match_Qtreeview_Qabstractitemmodel_Qmodelindex - Fatal编程技术网

Qt 如何获取存储指向外部模型的指针的模型的QModelIndex

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,我使用

我有一个模型,包含两个来自两个不同浏览器的书签节点列表(每个节点包含名称和可能的url)

类书签\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屏幕截图来向我们展示你想要它的样子吗?@马丁:我添加了更多信息