【问题标题】:Columns auto-resize to size of QTableView列自动调整到 QTableView 的大小
【发布时间】:2013-08-20 01:06:03
【问题描述】:

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

【问题讨论】:

  • 您是否总是希望列宽相同?如果没有,你可以通过调用 table->horizo​​ntalHeader()->setStretchLastSection(true); 来拉伸最后一列的宽度;

标签: c++ qt qtableview


【解决方案1】:

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

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

文档:

【讨论】:

    【解决方案2】:

    有一个标题标志来确保 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 的子类。

    【讨论】:

    • 我还没有测试过第二部分,但第一个有效,虽然我决定让窗口无法调整大小(对我来说更有意义)
    • 要设置成比例的列宽,我发现最简单的方法是覆盖 resizeEvent,但是通过子类化有问题的 QTableView,而不是 QMainWindow。
    【解决方案3】:

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

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

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

    1. void QHeaderView::stretchLastSection( bool stretch )
      正如Davy Jones 提到的。

      例子:

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

      例子:

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

    【讨论】:

      【解决方案4】:

      在 PyQt5 中,您可以通过以下方式在 table_widget 中实现:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 2016-09-14
        • 2017-08-25
        • 2011-02-19
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多