QTableView垂直调整数据大小而不刷新

时间:2014-04-17 17:01:33

标签: c++ qt qt4

我通过派生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);
}
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题在于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);
}