通过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;