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