I have two questions please.
first, I dont understand how this cast from qt's examples (Tree Model Completer) works:
QAbstractItemModel *completionModel = completer->completionModel();
QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
To copy to clipboard, switch view to plain text mode
according to qt's class references, QAbstractItemModel doesnt inherit from QAbstractProxyModel.
although indeed completer->completionModel() is a QStandardItemModel, but it makes no deference (it inherits only from QAbstractItemModel that in turn doesnt inherit from QAbstractProxyModel).
complete code of that member function is this:
{
if (!proxy)
return;
treeView->scrollTo(index);
}
void MainWindow::highlight(const QModelIndex &index)
{
QAbstractItemModel *completionModel = completer->completionModel();
QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
if (!proxy)
return;
QModelIndex sourceIndex = proxy->mapToSource(index);
treeView->selectionModel()->select(sourceIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
treeView->scrollTo(index);
}
To copy to clipboard, switch view to plain text mode
another question is why do we use a QAbstractProxyModel here?
this modified code works too:
{
/* QAbstractItemModel *completionModel = completer->completionModel();
QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
if (!proxy)
return;
QModelIndex sourceIndex = proxy->mapToSource(index); */
treeView->scrollTo(index);
}
void MainWindow::highlight(const QModelIndex &index)
{
/* QAbstractItemModel *completionModel = completer->completionModel();
QAbstractProxyModel *proxy = qobject_cast<QAbstractProxyModel *>(completionModel);
if (!proxy)
return;
QModelIndex sourceIndex = proxy->mapToSource(index); */
treeView->selectionModel()->select(/* sourceIndex */ index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
treeView->scrollTo(index);
}
To copy to clipboard, switch view to plain text mode
qt 4.4.3
Bookmarks