2

QTreeView今日、私は自分の要件に合わせてを構成しようとしています。私のビューには、基本的に 3 つの列があります。2 列目と 3 列目は、ウィジェットのサイズに関係なく、正確に 50 ピクセル幅にする必要があります。最初の列は残りのスペースを占有する必要があります。

ウィジェットを拡大すると、最初の列は必要な空き領域を自動的に占有し、2 番目と 3 番目の列は指定された 50 ピクセルの幅を保持する必要があります。

これは私がこれまでに試したことです:

main.cpp

#include <QApplication>
#include <QTreeView>
#include <QDebug>
#include <QStandardItemModel>
#include <QHeaderView>
#include "ColumnDelegate.h"

int main(int argc, char** args) {
    QApplication app(argc, args);
    auto widget = new QTreeView;
    auto model = new QStandardItemModel;
    model->insertRow(0, { new QStandardItem{ "Variable width" }, new QStandardItem{ "Fixed width 1" }, new QStandardItem{ "Fixed width 2" } });
    model->insertRow(0, { new QStandardItem{ "Variable width" }, new QStandardItem{ "Fixed width 1" }, new QStandardItem{ "Fixed width 2" } });
    widget->setModel(model);
    widget->setItemDelegateForColumn(1, new ColumnDelegate);
    widget->setItemDelegateForColumn(2, new ColumnDelegate);
    auto header=widget->header();

    header->setSectionResizeMode(QHeaderView::Fixed);
    header->resizeSection(1, 50);
    header->resizeSection(2, 50);
    widget->show();
    app.exec();
}

ColumnDelegate.h

#pragma once

#include <QStyledItemDelegate>

class ColumnDelegate : public QStyledItemDelegate {
    Q_OBJECT
public:
    virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        QSize ret= QStyledItemDelegate::sizeHint(option, index);
        ret.setWidth(50);
        return ret;
    }
};

しかし、実行後、私は得ました:

3 番目の列が多くのスペースを占めています

3 列目はさらに多くのスペースを占有しますが、1 列目はより多くのスペースを占有する必要があります

最小限の作業で私の望ましい動作を実装する方法を知っている人はいますか?

4

1 に答える 1