我正在研究Qt应用。那里我有QMainWindow。在其中添加了QTableView。当我运行该应用程序时,我看到需要滚动以显示整个表格,并且在其下方也显示空白。
我希望主窗口水平调整大小以使用表所需的空间。我也希望它垂直调整大小以没有空间被使用。我该如何实现?
到目前为止,这是我的代码:

void MainWindow::initUi() {
   setWindowTitle(tr("Main Window"));
   QWidget* centralWidget = new QWidget(this);
   QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);
   QFormLayout *upperLayout = new QFormLayout;
   // Default layout appearance of QMacStyle
   upperLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
   upperLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
   upperLayout->setFormAlignment(Qt::AlignHCenter | Qt::AlignTop);
   upperLayout->setLabelAlignment(Qt::AlignLeft);

   QVBoxLayout *resultsLayout = new QVBoxLayout;
   QTableView* table = new QTableView(centralWidget);
   table->verticalHeader()->hide();
   QStandardItemModel* model= new QStandardItemModel(4, 4);
      for (int row = 0; row < 4; ++row) {
         for (int column = 0; column < 4; ++column) {
            QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
            model->setItem(row, column, item);
         }
      }

    table->setModel(model);
    QLabel* upperLabel = new QLabel(tr("Label:"), centralWidget);
    upperLabel->setAlignment(Qt::AlignLeft);
    resultLabel = new QLabel(tr("Result goes here"), centralWidget);
    mainLayout->addLayout(resultsLayout);
    resultsLayout->addLayout(upperLayout);
    resultsLayout->addWidget(table);
    upperLayout->addRow(upperLabel, resultLabel);
    centralWidget->setLayout(mainLayout);
    setCentralWidget(centralWidget);
    this->adjustSize();
}

最佳答案

将表的sizeAdjustPolicy设置为AdjustToContents视图,然后在水平和垂直方向上将大小策略设置为Fixed。

AdjustToContents可能会对视图中的动态内容造成轻微的性能损失,因为每次数据更改都可能会更改布局。

Qt Designer是一个非常实用的工具,可以快速解决布局问题。 {table,list,tree}小部件的行为与视图完全相同(因为它们是相同的),并且可以在Qt Designer中用虚拟数据快速填充小部件。

关于c++ - QTableView大于其容器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53209162/

10-15 17:45