在日常开发中界面为了快速并且炫酷,大家可能会选择qml作为主体。但是后台数据的提供还是用qt c++的实现,MVC中即可用Model进行。例如:QAbstractListModel
一般的使用只实现下面三个函数即可支撑qml中的交互:
QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
QHash<int, QByteArray> QAbstractItemModel::roleNames() const
但是想要一些其他的功能,就需要自己去实现了!
一、例如想进行元素的移动,就需要model进行支撑
void AppInfoModel::move(int from, int to, int n)
{
Q_UNUSED(n)
int offset = 0;
if(from == to) {
return;
} else if(to > from) {
offset = to - from;
}
const QModelIndex& parent = QModelIndex();
beginMoveRows(parent, from, from, parent, to + offset);
AppInfo* item = appInfos_.takeAt(from);
appInfos_.insert(to,item);
endMoveRows();
}
主要在于beginMoveRows&endMoveRows中间进行的操作,将待移动项取出并插入到新位置。
需要注意上移和下移是不一样的呦!
二、又例如想进行元素的删除,也需要model进行支撑
void AppInfoModel::remove(int index)
{
beginRemoveRows(QModelIndex(), index, index);
QObject *obj = appInfos_.at(index);
appInfos_.removeAt(index);
obj->deleteLater();
endRemoveRows();
}
主要在于beginRemoveRows&endRemoveRows中间进行的操作,将待删除元素取出,在model实际数据存储处进行remove,最后再将元素彻底delete。文章来源:https://www.toymoban.com/news/detail-675139.html
需要注意deleteLater的使用哦!以免造成内存泄漏!文章来源地址https://www.toymoban.com/news/detail-675139.html
到了这里,关于qml使用QAbstractListModel作为数据源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!