列自动调整大小为QTableView的大小

kha*_*vah 27 c++ qt qtableview

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

fro*_*tto 55

此代码同样拉伸每列,以便它们适合表的宽度.

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
Run Code Online (Sandbox Code Playgroud)

文档:


Dav*_*nes 30

有一个标题标志,以确保QTableView的最后一列填充其父级(如果已调整大小).您可以这样设置:

table_view->horizontalHeader()->setStretchLastSection(true);
Run Code Online (Sandbox Code Playgroud)

但是,这不会按比例调整其他列的大小.如果你也想这样做,你可以在父母的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);
}
Run Code Online (Sandbox Code Playgroud)

QParent类是QMainWindow的子类.


Mat*_*ato 6

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

header = table_widget.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是 PyQt6,则变为: `header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeMode.ResizeToContents)` (3认同)

iam*_*ony 5

小部件QTableViewQTreeView及其派生类(例如QTableWidget)具有以下两个有用的方法:

QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;
Run Code Online (Sandbox Code Playgroud)

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

  1. QHeaderView :: stretchLastSection(bool Stretch)
    正如Davy Jones提到的那样。

    例:

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

    例:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    
    Run Code Online (Sandbox Code Playgroud)