很久之前寫過一篇關於QTreeView快速顯示超過千萬條數據項的方法,如果說那篇文章講的是QTreeView的內功的話,今天這篇是講QTreeView的外功,有時我們想改變視圖的數據項的行高,那怎么辦呢?今天在這里介紹兩種改變行高的方法:
1.通過更改QTreeView的默認delegate的方法
- 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,我的做法如下:
- CTreeView::CTreeView(QWidget *parent) : QTreeView(parent)
- {
- CDelegate *pDelegate = new CDelegate(this);
- setItemDelegate(pDelegate);
- setUniformRowHeights(true);
- }
大家看是不是很簡單
2.通過重載QAbstractItemModel的data方法,如下:
- 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構造函數中加:
- CDelegate *pDelegate = new CDelegate(this);
- setItemDelegate(pDelegate);
是不是也很簡單。
http://blog.csdn.net/rabinsong/article/details/13161799