Как получить QModelIndex модели, в которой хранятся указатели на внешнюю модель - PullRequest
0 голосов
/ 05 мая 2019

У меня есть модель из 2 списков узлов закладок (каждый из которых содержит имена и, возможно, URL) из 2 разных браузеров.

class Bookmark_Node {
           QString name, 
           QString url, 
           Bookmark_node* parent}

Списки закладок:

    std::vector<Bookmark_Nodes *>bookmarkList_1
    std::vector<Bookmark_Nodes *>bookmarkList_2

Эта модель также имеет метод сравнения, который определяет, какие закладки включены только в один из списков закладок.В результате у меня есть 2 дополнительных списка в модели:

std::vector<Bookmark_Nodes *>bookmarkOnlyInList_1
std::vector<Bookmark_Nodes *>bookmarkOnlyInList_2

С Qt я использую 2 QTreeview для отображения bookmarkList_1 и bookmarkList_2, где QModelIndex внутренне указывает на Bookmark_Nodes.

Теперь, так какУ меня есть bookmarkOnlyInList_1 / bookmarkOnlyInList_1, я хочу прокрутить до Bookmark_Node с помощью заданного целого числа var (например, 3-й уникальный Bookmark_Node из bookmarkOnlyInList_1.

Чтобы найти QModelIndex в древовидном представлении, я пытаюсь использовать QAstract:: match ().

Но я потерян:

Как установить startIndex (1-й параметр) в корень верхнего уровня дерева?

Какпередать мой указатель Bookmark_Node в QVariant (3-й параметр)?

Или, в более общем случае: как получить QModelIndex для передачи в QTreeView :: scrollTo, имея внутренний указатель указатель Bookmark_Node.

Я могу обогатитьbookmarkOnlyInList_1 / 2 от QModelIndices, но это смешало бы модель с представлением, которого я хочу избежать. Любые предложения?

Итакмне больше информации:

Когда программа запускается, она выглядит следующим образом: enter image description here

После нажатия кнопки следует поискать «Майк» и развернуть этот узел,как на следующем изображении.Проблема в том, что он не расширен.enter image description here

Если я разверну все, я получу полную модель: enter image description here

Здесь код, который будет запускаться после запускакнопка.Строка QModelIndexList включает в себя 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);
        }
    }
}
...