QTreeView model/View
来源:互联网 发布:北京网络 编辑:程序博客网 时间:2024/06/06 13:08
QTreeView顾名思义是树形结构,分级目录。直接上代码吧。
首先是Item的定义,item的定义有点像链表,记录父节点和子节点,功能大概就是获取子节点数,获取父节点,子节点,增加子节点,获取数据等。
class TreeItem
{
public:
TreeItem(QList<QVariant> data,TreeItem *parentItem = 0);
int childCount();
int columnCount();
void appendChild(TreeItem *childItem);
QVariant data(int column);
TreeItem *parentItem();
TreeItem *childItem(int row);
int row();
private:
TreeItem *m_parentItem;
QList<TreeItem *> m_childItem;
QList<QVariant> m_valueData;
};
#include "treeitem.h"
TreeItem::TreeItem(QList<QVariant> data,TreeItem *parentItem)
{
m_parentItem = parentItem;
m_valueData = data;
}
int TreeItem::childCount()
{
return m_childItem.count();
}
int TreeItem::columnCount()
{
return m_valueData.count();
}
void TreeItem::appendChild(TreeItem *childItem)
{
m_childItem.append(childItem);
}
QVariant TreeItem::data(int column)
{
return m_valueData.value(column);
}
TreeItem * TreeItem::parentItem()
{
return m_parentItem;
}
TreeItem *TreeItem::childItem(int row)
{
return m_childItem.value(row);
}
int TreeItem::row()
{
if(m_parentItem)
return m_parentItem->m_childItem.indexOf(const_cast<TreeItem *>(this));
return 0;
}
model继承QAbstractItemModel,
#include <QAbstractItemModel>
#include "treeitem.h"
class TreeModel : public QAbstractItemModel
{
public:
TreeModel();
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QModelIndex index(int row, int column, const QModelIndex &parent) const;
QModelIndex parent(const QModelIndex &child) const;
int rowCount(const QModelIndex &parent) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
void initModel();
public:
TreeItem *m_rootItem;
};
#include "treemodel.h"
#include <QDebug>
#include <QIcon>
TreeModel::TreeModel()
{
QList<QVariant> rootdata;
rootdata << "Title";
m_rootItem = new TreeItem(rootdata);
}
int TreeModel::columnCount(const QModelIndex &parent) const
{
if(parent.isValid())
{
return static_cast<TreeItem *>(parent.internalPointer())->columnCount();
}
return m_rootItem->columnCount();
}
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid())
return QVariant();
if(role == Qt::DecorationRole && index.column()==0)
{
return QIcon("1.png");
}
if(role != Qt::DisplayRole)
return QVariant();
TreeItem *item = static_cast<TreeItem *>(index.internalPointer());
return item->data(index.column());
}
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const
{
if(!hasIndex(row,column,parent))
return QModelIndex();
TreeItem *parentItem;
if(!parent.isValid())
parentItem = m_rootItem;
else
parentItem = static_cast<TreeItem *>(parent.internalPointer());
TreeItem *childItem = parentItem->childItem(row);
if(childItem)
return createIndex(row,column,childItem);
else
return QModelIndex();
}
QModelIndex TreeModel::parent(const QModelIndex &child) const
{
if(!child.isValid())
return QModelIndex();
TreeItem *childItem = static_cast<TreeItem *>(child.internalPointer());
TreeItem *parentItem = childItem->parentItem();
if(parentItem == m_rootItem)
return QModelIndex();
return createIndex(parentItem->row(),0,parentItem);
}
int TreeModel::rowCount(const QModelIndex &parent) const
{
TreeItem *parentItem;
if(!parent.isValid())
parentItem = m_rootItem;
else
parentItem = static_cast<TreeItem *>(parent.internalPointer());
return parentItem->childCount();
}
QVariant TreeModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
return m_rootItem->data(section);
return QVariant();
}
void TreeModel::initModel()
{
QStringList sList;
sList << "1111" << "2222" << "3333" << "4444" << "5555";
QStringList ssList;
ssList << "AAAA" << "BBBB" << "CCCC" << "DDDD" << "EEEE";
for(int i = 0; i < 5; i++)
{
QList<QVariant> data;
data << sList.at(i);
TreeItem *item = new TreeItem(data, m_rootItem);
for(int j = 0; j < 5; j++)
{
QList<QVariant> data1;
data1 << ssList.at(i);
TreeItem *item1 = new TreeItem(data1, item);
item->appendChild(item1);
}
m_rootItem->appendChild(item);
}
}
QTreeView
view = new QTreeView(this);
view->setFixedSize(640,480);
TreeModel *model = new TreeModel;
model->initModel();
view->setModel(model);
view->show();
阅读全文
0 0
- QTreeView model/View
- Model/View之子类化QAbstractItemModel实现QTreeView的复选框
- 树形控件QTreeView使用自定义模型model
- model/view
- qtreeview
- QTreeView
- QTreeView
- Qt QTreeView 加 自定义Model实现自定义树形控件
- Model View View-Model 模式(MVVM)
- Model-View-Controller Pattern
- Model View Presenter
- Model-View-Controller (MVC)
- Model-View-Control
- MVC(Model-View-Control)
- Model-View-Control
- Model-View-Controller
- model-view架构-38
- QT model-view架构
- redis-sentinels 启动报错:All sentinels down, cannot determine where is redis-sentinel master is running.
- hadoop搭建,上传文件时出现错误,没有到主机的路由
- <c:forEach varStatus="status">中 varStatus的属性简介
- Shuffle'm Up
- spark streaming集成kafka接收数据的方式
- QTreeView model/View
- PHP数组的总结
- springboot打成war包
- 前向逐步回归
- HDU-4267:A Simple Problem with Integers(多线段树选择更新)
- c:forEach varStatus属性 current当前这次迭代的(集合中的)项 index当前这次迭代从 0 开始的迭代索引 count当前这次迭代从 1 开始的迭代计数 first用来表明
- new Integer(123)==new Integer(123)为false和new Integer(123)==123为true
- Hadoop集群(高可用)
- android获取PDF文件的缩略图