您当前的位置: 首页 >  qt

txwtech

暂无认证

  • 6浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QT在模型、视图类中启用拖放复制

txwtech 发布时间:2022-10-06 22:16:17 ,浏览量:6

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            
关注
打赏
1665060526
查看更多评论
0.0407s