pro文件:
QT+=widgets
HEADERS += \
stringlistmodel.h
SOURCES += \
main.cpp \
stringlistmodel.cpp
STRINGLISTMODEL.h
#ifndef STRINGLISTMODEL_H
#define STRINGLISTMODEL_H
#include
#include
class StringListModel : public QAbstractListModel
{
Q_OBJECT
public:
StringListModel(const QStringList &strings,QObject *parent =0):
QAbstractListModel(parent),stringList(strings){}
int rowCount(const QModelIndex &parent=QModelIndex()) const;
QVariant data(const QModelIndex &index,int role) const;
QVariant headerData(int section,Qt::Orientation orientation,
int role=Qt::DisplayRole) const;
//添加编辑功能
Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index,const QVariant &value,int role=Qt::EditRole);
//设置插入与删除行
bool InsertRows(int position,int rows,const QModelIndex &index=QModelIndex());
bool RemoveRows(int position,int rows,const QModelIndex &index=QModelIndex());
// //在模型、视图类中启用拖放
Qt::DropActions supportedDropActions() const;
QStringList mimeTypes() const;
QMimeData *mimeData(const QModelIndexList &indexes) const;
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
private:
QStringList stringList;
};
#endif // STRINGLISTMODEL_H
STRINGLISTMODEL.cpp
#include "stringlistmodel.h"
#include
#include
//创建只读模型。。。by txwtech
//StringListModel::StringListModel()
//{
//}
int StringListModel::rowCount(const QModelIndex &parent) const
{
return stringList.count();
}
QVariant StringListModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid())
{
return QVariant();
}
if(index.row()==stringList.count())
{
return QVariant();
}
// if(role==Qt::DisplayRole)//只读模型
if(role==Qt::DisplayRole||role==Qt::EditRole)//编辑功能
{
return stringList.at(index.row());
}
else
{
return QVariant();
}
}
QVariant StringListModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if(role!=Qt::DisplayRole)
return QVariant();
if(orientation==Qt::Horizontal)
return QString("Column is %1").arg(section);
else
return QString("Row is %1").arg(section);
}
Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const
{
// if(!index.isValid())
// {
// return Qt::ItemIsEnabled;
// }
// return QAbstractItemModel::flags(index)|Qt::ItemIsEditable;//设置可编辑模式的功能
if(!index.isValid())
return Qt::ItemIsEnabled|Qt::ItemIsDropEnabled;//如果该索引无效,那么只支持放入操作
//如果有效,那么既可以拖拽也可以放入
return QAbstractItemModel::flags(index)|Qt::ItemIsEditable|Qt::ItemIsDragEnabled|Qt::ItemIsDropEnabled;
}
bool StringListModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(index.isValid()&&role==Qt::EditRole)
{
stringList.replace(index.row(),value.toString());
emit dataChanged(index,index);//发射数据有改变的信号
return true;
}
return false;
}
bool StringListModel::InsertRows(int position, int rows, const QModelIndex &index)
{
beginInsertRows(QModelIndex(),position,position+rows-1);
for(int row=0;rowtext;
newItems
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?