QTableView垂直调整未刷新的数据大小

QTableView resize vertically data not refreshed

本文关键字:数据 刷新 垂直 调整 QTableView      更新时间:2023-10-16

我通过派生QTableView和QAbstractTableModel实现了一个表。这一切似乎都很好,除了当我垂直调整表的大小时,最初不在视图中的行没有显示任何数据。

水平调整大小没有问题,可能是因为我已经重写了resizeEvent()方法,并且正在重新计算列宽,如果表垂直调整大小,我显然不会这样做。

我在模型中使用以下代码将数据添加到表中:

bool DDUTableModel::insertRow(int row, const QModelIndex& parent)
{
    beginInsertRows(parent, row, row);
    digital_display_list_.append(DigitalDisplayData(path_));
    endInsertRows();
    return true;
}

resizeEvent()看起来像这样:

void DDUTableView::resizeEvent(QResizeEvent* ev)
{

int num_columns = NUM_ELEMENTS(COLUMN_WIDTHS);
if (num_columns > 0) {
    int width = ev->size().width();
    int used_width = 0;
    // Set our widths to be a percentage of the available width
    for (int i = 0; i < num_columns - 1; i++) {
        int column_width = (width * COLUMN_WIDTHS[i]) / 100;
        this->setColumnWidth(i, column_width);
        used_width += column_width;
    }
    // Set our last column to the remaining width
    this->setColumnWidth(num_columns - 1, width - used_width);
}
}

有什么想法吗?

问题出在resizeEvent()上。我还需要调用从中派生的QTableView类中的方法,以在垂直调整大小时强制刷新。修改后的方法如下:

void DDUTableView::resizeEvent(QResizeEvent* ev)
{
   int num_columns = NUM_ELEMENTS(COLUMN_WIDTHS);
   if (num_columns > 0) {
      int width = ev->size().width();
      int used_width = 0;
      // Set our widths to be a percentage of the available width
      for (int i = 0; i < num_columns - 1; i++) {
         int column_width = (width * COLUMN_WIDTHS[i]) / 100;
         this->setColumnWidth(i, column_width);
         used_width += column_width;
      }
      // Set our last column to the remaining width
      this->setColumnWidth(num_columns - 1, width - used_width);
  }
  QTableView::resizeEvent(ev);
}