通过setStretchLastSection(bool stretch)可以设置最后一列自适应,对于QTreeView,stretch默认为true。但有时候我们需要设置第一列自适应,比如文件浏览器,共有名称、大小和修改日期三列,大小和日期的宽度几乎是固定的,但名称却可长可短,此时我们希望在窗口大小变化时,第一列的宽度能自动缩放,第二列和第三列的宽度保存不变,而且要支持鼠标拖动调整列宽。
一.效果
二.实现
QHTreeView.h
#ifndef QHTREEVIEW_H
#define QHTREEVIEW_H
#include <QTreeView>
#include <QEvent>
#include <QStandardItemModel>
class QHTreeView : public QTreeView
{
public:
QHTreeView(QWidget *parent = nullptr);
void setModel(QStandardItemModel *model);
protected:
bool eventFilter(QObject *watched, QEvent *event);
void resizeEvent(QResizeEvent *event);
private:
void processMouseEvent(QMouseEvent *event);
int m_secondColumnWidth;
int m_thirdColumnWidth;