Попробуй складывать размеры столбцов из QHeaderView::sectionSize ( int logicalIndex ) const
К сожалению, все не так просто.

Вот такой размер (tw -- это QTableWidget):
QSize( tw->horizontalHeader()->length() + tw->verticalHeader()->width(),
tw->verticalHeader()->length() + tw->horizontalHeader()->height() )
дает примерно то, что нужно, но немного меньше. Нужно прибавить еще что-то (около 20 пикселей). Но сам такой подход -- чистый подгон.
Неужели нет функции, которая возвращает размер рабочей области ??!!
Я начал копать в сторону:
QSize QAbstractScrollArea::maximumViewportSize () const
Returns the size of the viewport as if the scroll bars had no valid scrolling range.
но и там облом: размер явно меньше области и не зависит от количества строк/столбцов.
