我是 Qt 的新手,我刚刚设法使 QTableView 与我的模型一起工作。它有固定的 3 列。当我打开一个窗口时,它看起来不错,但是当我调整窗口大小时,QTableView 本身会调整大小,但列的宽度保持不变。有什么内置的方法可以让它工作吗?我希望在每次调整窗口大小时调整列的大小以适应 QTableView 的边缘。
4 回答
此代码同样拉伸每一列,使它们适合表格的宽度。
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
文件:
有一个标题标志来确保 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 的子类。
Widgets QTableView,QTreeView和它们的派生类(例如QTableWidget)有这两个有用的方法:
QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;
如果您打开类QHeaderView的文档,您会发现为项目视图设置行或列标题的外观和行为的方法。您可以通过以下方法之一解决您的问题:
void QHeaderView::stretchLastSection( bool stretch )
正如Davy Jones所说。例子:
QTableView *table = new QTableView(); table->horizontalHeader()->setStretchLastSection(true);
void QHeaderView::setResizeMode(ResizeMode mode)
作为模式,你可以设置 QHeaderView::Stretch 或 QHeaderView::ResizeToContents。
不幸的是,这种方法有一个缺点——应用后,您将无法手动(在 GUI 中)或以编程方式更改列(或行)的大小。例子:
QTableView *table = new QTableView(); table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
在 PyQt5 中,您可以通过以下方式在 table_widget 中实现:
header = table_widget.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)