Qt QTableWidget 列调整大小

Posted

技术标签:

【中文标题】Qt QTableWidget 列调整大小【英文标题】:Qt QTableWidget Column resizing 【发布时间】:2013-03-28 15:57:07 【问题描述】:

我有一个带有 QToolbarQWidget 和一个 QTabWidgetMainWindow。布局是“网格”。但是,我的窗口是可调整大小的,因为我有一个布局,所以效果很好。但是有一个问题,在我的 QTabWidget 中,我有一个 QTableWidget 有两列(布局也是“网格”)。如果我调整整个窗口的大小,QTableWidget 会调整大小,但不会调整列。

例如,每当我调整窗口大小时,我的 QTabWidget 都会调整大小,其中的 QTableWidget 也会随之调整。只有我的 QTableWidget 中的列不会。

那么...如果我的 QTableWidget 调整大小,我该如何调整它们的大小?

【问题讨论】:

【参考方案1】:
    更改QHeaderViewResizeMode。例如,使用:

horizontalHeader()->setResizeMode( 0, QHeaderView::Stretch );

调整第一列的大小,使QTableWidget 总是满的。


    覆盖resizeEvent 并在调整QTableWidget 的大小时自行设置每列的宽度。

【讨论】:

在哪个函数中设置horizo​​ntalheader? "表格可以有水平和垂直标题。创建标题的最简单方法是向 setHorizo​​ntalHeaderLabels() 和 setVerticalHeaderLabels() 函数提供字符串列表。"请参阅QTableWidget details 在 QT5 中:horizo​​ntalHeader()->setResizeMode(0, QHeaderView::Stretch); Qt5中没有,它是horizo​​ntalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); setResizeMode() 方法不存在。【参考方案2】:

    拉伸最后一列:

    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
    

    拉伸列#n

    ui->tableWidget->horizontalHeader()->setSectionResizeMode(n, QHeaderView::Stretch);
    

【讨论】:

【参考方案3】:

最好的解决方案,在 Qt5 中你必须使用 setSectionResizeMode 而不是 setResizeMode

tabv = QTableView()
tabv.horizontalHeader().setSectionResizeMode(QHeaderView::Stretch)

您也可以在调整大小时指定Stretch 模式

tabv.horizontalHeader().resizeSections(QHeaderView::Stretch)

【讨论】:

【参考方案4】:
ui->mytable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

【讨论】:

避免只使用代码的答案,它们通常被标记为低质量并被删除。试着在你的答案中付出一些努力,并解释代码的作用以及它将如何应用于原始问题。【参考方案5】:

如果您只想调整最后一列的大小:

ui->tableWidget->horizontalHeader()->setStretchLastSection(1);

【讨论】:

【参考方案6】:

您可以使用 QHeaderView 和方法 QHeaderView::setResizeMode() 更改列或行的“调整大小模式”。

http://qt-project.org/doc/qt-4.8/qheaderview.html#setResizeMode

http://qt-project.org/doc/qt-4.8/qtableview.html#verticalHeader

http://qt-project.org/doc/qt-4.8/qtableview.html#horizontalHeader

【讨论】:

【参考方案7】:

在 Qt5 中,您必须使用 setSectionResizeMode 而不是 setResizeMode

QTableWidget* myTable = new QTableWidet;
QHeaderView* header = myTable->horizontalHeader();
header->setSectionResizeMode(QHeaderView::Stretch);

【讨论】:

以上是关于Qt QTableWidget 列调整大小的主要内容,如果未能解决你的问题,请参考以下文章

调整 QTableWidget 中的列大小

qt中QTableWidget怎么根据内容自动调整列宽行高?

QTableWidget 在调整内容时尊重跨度

QTableWidget 列跨度未正确调整大小

如何防止用户使用 Python 和 Qt 在 QtableWidget 中移动列的大小?

Qt 添加表格小部件项目的问题