Qt4 QTableWidget使列根据内容调整大小、交互式并与表边界对齐

Qt4 QTableWidget make Colums resized to contents, interactive and aligned to tableborder

本文关键字:交互式 对齐 边界 调整 QTableWidget Qt4      更新时间:2023-10-16

此代码

horizontalHeader()->setResizeMode(QHeaderView::Stretch);

拉伸了CCD_ 1的秋天。我希望它们被拉伸,这意味着与qtablewidget的边界对齐,无论它有多大

我还希望它们不要小于它们的内容,并且可以由用户调整大小。

这意味着,我将不得不使用

horizontalHeader()->setResizeMode(QHeaderView::Stretch);
horizontalHeader()->setResizeMode(QHeaderView::Interactive);
horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);

这是不可能的。

我知道我可以给每一列提供另一种视图,比如

horizontalHeader()->setResizeMode(0, QHeaderView::Interactive);
horizontalHeader()->setResizeMode(1, QHeaderView::ResizeToContents);

但这不是我想要的。我希望柱子是

  • 不小于其内容
  • 可由用户调整大小
  • 与qtablewidget的边框对齐

有什么想法吗?

我认为您应该重新实现sizeHintForColumn。下面的代码将为您提供一个开始。

int TableWidget::sizeHintForColumn(int column) const  // to get resize on all rows in the column, i.e. not only visible rows.
{
   if(d_resizeColumnsOnVisibleRowsOnly)
      return QTableView::sizeHintForColumn(column);
   if(!model())
      return -1;
   QStyleOptionViewItem option(viewOptions());
   int hint(0);
   QModelIndex index;
   QWidget* w(0);
   for(int row(0);row<rowCount();++row)
   {
       index=model()->index(row,column);
       w=cellWidget(row,column);
       int hint_for_row(qMax(itemDelegate(index)->sizeHint(option,index).width(),(w?w->sizeHint().width():0)));
       hint=qMax(hint,hint_for_row);
   }
   return showGrid()?hint+1:hint;
}