QTableWidget使用父级可用大小

时间:2019-11-21 15:54:09

标签: c++ qt qwidget qtablewidget

我qt我添加了一个QTableWidget。我尝试了多种方法将其添加到布局中,但是QTableWidget始终具有其默认大小。 当然可以设置“最小宽度”,但我希望QTableWidget会使用整个可用空间,就像其他所有小部件一样。

this->horizontalHeader()->hide();
    this->verticalHeader()->hide();
    this->setRowCount(m_numRows);
    this->setColumnCount(m_numCols);
    this->horizontalHeader()->setStretchLastSection(true);
    this->verticalHeader()->setDefaultSectionSize(12);
    this->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

我也尝试过

 this->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);

将整个可用空间与QTableWidget一起使用的秘密是什么?

1 个答案:

答案 0 :(得分:0)

大多数情况下,您会将小部件添加到QLayout实例中,作为小部件与其父小部件之间的中介,以自动处理小部件相对于其父小部件的位置和大小。例如,下面显示了如何为QTableWidget实现这一目标。

#include <QtGui/QApplication>
#include <QtGui/QHBoxLayout>
#include <QtGui/QMainWindow>
#include <QtGui/QTableWidget>

int main(int argc, char** argv)
{
  QApplication app(argc, argv);

  QMainWindow mainWindow;
  mainWindow.setCentralWidget(new QWidget);

  QHBoxLayout layout;
  layout.addWidget(new QTableWidget(mainWindow.centralWidget()));

  mainWindow.centralWidget()->setLayout(&layout);
  mainWindow.show();

  return app.exec();
}

这个例子有点人为。主窗口的特殊之处在于,您可以将QTableWidget实例设置为中央窗口小部件,并且QMainWindow会自动将其很好地布置。

为演示QLayout的功能,创建了一个单独的中央窗口小部件,并将表格窗口小部件添加到中央窗口小部件上的布局集。如果您不打算在中央小部件上设置布局(注释setLayout(...)调用),则可能会得到与您已有的行为类似的行为。

最后,QHBoxLayout可以用QVBoxLayout代替,以达到相同的结果。仅当您将多个小部件添加到同一布局时,才开始选择选择QLayout的哪种实现方式。