我有一個使用internalpointer()
的書面模型(myModel),他的data()
實現。 我想過濾一棵樹(基於myModel)使用QSortFilterProxyModel
,Qt重新實現QSortFilterProxyModel :: data()而模型使用的是內部指針()
我得到它的工作,只有當我嘗試從樹中獲取任何數據我的應用程序崩潰。
我認爲它是因爲在調用樹數據時,期望獲得myModel indexModel,我得到了myQSortFilterProxyModel
indexModel。
myItem *myModel::getItem(const QModelIndex &index) const
{
if (index.isValid()) {
myItem *item = static_cast<myItem*>(index.internalPointer());
if (item) return item;
}
return rootItem;
}
基於myModel data()
使用internalPointer()
QVariant myModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role != Qt::DisplayRole && role != Qt::EditRole)
return QVariant();
myItem *item = getItem(index);
return item->data(index.column());
}
設定基於myModel螞蟻之間的過濾器模型中的樹
void myTree::myInit()
{
...
myModel *model = new myModel();
proxyModel = new mySortFilterProxyModel(this);
proxyModel->setSourceModel(model);
this->setModel(proxyModel);
...
myTree是QTreeView則子類。 我想用tree->model()
來得到myModel模型
我該如何獲取源模型數據?
謝謝,但我已經在使用內部指針有課,我知道這是錯誤的方式去.. 我發現花葯解決方案,我重寫myTree ::模型() 和myTrre: :currentIndex() 給我myModel數據而不是proxyModel數據。 這對我更好,因爲我不需要更改任何原始代碼。 –