我是Qt的新手,我刚刚设法让QTableView与我的模型一起工作。它固定了3列。当我打开一个窗口时,它看起来不错但是当我调整窗口大小时,QTableView本身会调整大小,但列的宽度保持不变。是否有任何内置方式使其工作?我希望每个窗口调整大小时都要调整列的大小以适应QTableView的边缘。
答案 0 :(得分:50)
此代码同样拉伸每列,以使它们适合表格的宽度。
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
文档:
答案 1 :(得分:25)
有一个标题标志可确保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的子类。
答案 2 :(得分:4)
小部件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);
答案 3 :(得分:0)
在PyQt5中,您可以在table_widget中执行以下操作:
header = table_widget.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)