列自动调整大小以适应 QTableView 的大小

问题描述 投票:0回答:5

我是 Qt 新手,我刚刚设法使 QTableView 与我的模型一起工作。它有固定的 3 列。当我打开一个窗口时,它看起来不错,但是当我调整窗口大小时,QTableView 本身会调整大小,但列的宽度保持不变。有没有任何内置方法可以使其工作?我希望每次调整窗口大小时调整列大小以适应 QTableView 的边缘。

c++ qt qtableview
5个回答
97
投票

此代码均匀拉伸每一列,使它们适合表格的宽度。

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

文档:


51
投票

有一个标题标志可确保 QTableView 的最后一列在调整大小时填满其父级。你可以这样设置:

table_view->horizontalHeader()->setStretchLastSection(true);

但是,这不会按比例调整其他列的大小。如果您也想这样做,您可以在父级的 resizeEvent 中处理它:

void QParent::resizeEvent(QResizeEvent *event) {
    table_view->setColumnWidth(0, this->width()/3);
    table_view->setColumnWidth(1, this->width()/3);
    table_view->setColumnWidth(2, this->width()/3);

    QMainWindow::resizeEvent(event);
}

QParent 类是 QMainWindow 的子类。


7
投票

Widgets QTableViewQTreeView及其派生类(如QTableWidget)有这两个有用的方法:

QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;

如果您打开类 QHeaderView 的文档,您将找到设置项目视图的行或列标题的外观和行为的方法。您可以通过以下方法之一解决您的问题:

  1. void QHeaderView::stretchLastSection( 布尔拉伸 )
    正如戴维·琼斯提到的。

    示例:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setStretchLastSection(true);
    
  2. void QHeaderView::setResizeMode( ResizeMode 模式)
    作为 mode,您可以设置 QHeaderView::Stretch 或 QHeaderView::ResizeToContents。
    不幸的是,这种方法有一个缺点 - 应用后,您将无法手动(在 GUI 中)或以编程方式更改列(或行)的大小。

    示例:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    

5
投票

在 PyQt5 中,您可以通过执行以下操作在 table_widget 中实现此目的:

header = table_widget.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)

0
投票

像冠军一样工作:SetSectionResizeMode。

© www.soinside.com 2019 - 2024. All rights reserved.