У меня есть модель из 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, но это смешало бы модель с представлением, которого я хочу избежать. Любые предложения?
Итакмне больше информации:
Когда программа запускается, она выглядит следующим образом:
После нажатия кнопки следует поискать «Майк» и развернуть этот узел,как на следующем изображении.Проблема в том, что он не расширен.
Если я разверну все, я получу полную модель:
Здесь код, который будет запускаться после запускакнопка.Строка 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);
}
}
}