改变QTreeView项高的方法(改变Delegate行高,或者::data取数据的时候,根据Qt::SizeHintRole进行判断)
2016-06-25 05:26
1131 查看
很久之前写过一篇关于QTreeView快速显示超过千万条数据项的方法,如果说那篇文章讲的是QTreeView的内功的话,今天这篇是讲QTreeView的外功,有时我们想改变视图的数据项的行高,那怎么办呢?今天在这里介绍两种改变行高的方法:
1.通过更改QTreeView的默认delegate的方法
[cpp] view plain copy
class CDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
CDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
}
protected:
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QSize size = QStyledItemDelegate::sizeHint(option, index);
return QSize(size.width(), 28);
}
};
默认的情况下,QTreeView采用QStyledItemDelegate作为其代理,通过重载QStyledItemDelegate的sizeHint方法,我这里把行高设为28,大家可以根据需要修改对应的行高,然后,通过QTreeView的默认代理替换为CDelegate,我的做法如下:
[cpp] view plain copy
CTreeView::CTreeView(QWidget *parent) : QTreeView(parent)
{
CDelegate *pDelegate = new CDelegate(this);
setItemDelegate(pDelegate);
setUniformRowHeights(true);
}
大家看是不是很简单
2.通过重载QAbstractItemModel的data方法,如下:
[cpp] view plain copy
QVariant CMChModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (Qt::SizeHintRole == role)
{
return QSize(pTreeView->visualRect(index).width(), 28);
}
return QVariant();
}
其中pTreeView就是上面的CTreeView,这中方法不用在CTreeView构造函数中加:
[cpp] view plain copy
CDelegate *pDelegate = new CDelegate(this);
setItemDelegate(pDelegate);
是不是也很简单。
http://blog.csdn.net/rabinsong/article/details/13161799
1.通过更改QTreeView的默认delegate的方法
[cpp] view plain copy
class CDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
CDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
}
protected:
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QSize size = QStyledItemDelegate::sizeHint(option, index);
return QSize(size.width(), 28);
}
};
默认的情况下,QTreeView采用QStyledItemDelegate作为其代理,通过重载QStyledItemDelegate的sizeHint方法,我这里把行高设为28,大家可以根据需要修改对应的行高,然后,通过QTreeView的默认代理替换为CDelegate,我的做法如下:
[cpp] view plain copy
CTreeView::CTreeView(QWidget *parent) : QTreeView(parent)
{
CDelegate *pDelegate = new CDelegate(this);
setItemDelegate(pDelegate);
setUniformRowHeights(true);
}
大家看是不是很简单
2.通过重载QAbstractItemModel的data方法,如下:
[cpp] view plain copy
QVariant CMChModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (Qt::SizeHintRole == role)
{
return QSize(pTreeView->visualRect(index).width(), 28);
}
return QVariant();
}
其中pTreeView就是上面的CTreeView,这中方法不用在CTreeView构造函数中加:
[cpp] view plain copy
CDelegate *pDelegate = new CDelegate(this);
setItemDelegate(pDelegate);
是不是也很简单。
http://blog.csdn.net/rabinsong/article/details/13161799
相关文章推荐
- Qt导出Excel的简单实现
- QTableView的表格项中加入图标的方法(重载View::mouseMoveEvent,并使用View::setIconSize函数设置图标的大小)
- Qt限制文本框输入的方法(使用QRegExpValidator,为QLineEdit所独有)
- 浅谈qt 布局器
- d指针在Qt上的应用及实现(d指针能实现二进制兼容)
- QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)
- 组合框里添加复选框的方法(使用勾选的假象,用图片代替而已,并非QT原生支持)
- 深度探索QT窗口系统(五篇)
- Qt .pro文件部分变量解析
- Qt开发实例-贪吃蛇
- qwtplot3d+QT5.6.0+VS2013+windows10编译
- QT5.4 计算器程序 打包&发布,解决dll的最新解决方案(图文并茂,很清楚)
- qt 设置应用图标
- 使用 PyQt 转换网页到 PDF(使用QtWebKit加载完毕后,打印整个窗口就行了,真简单!)
- pyqt中使用matplotlib绘制动态曲线 – pythonic
- pyqt开发教程-搭建环境和开发示例
- [转]使 Windows 下的 Qt 应用程序获得 Administrator 权限
- Qt学习(二)------实例mynotepad制作
- Qt tcp socket编程
- QTP 依次读取文本中的各行数据