とりあえず、今必要な機能のみ試してみた。全部試すのは大変なんで(^^;)

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    const int ROWS = 10;
    const int COLS = 5;

    QTableWidget *tw = ui->tableWidget;
    tw->clear();
    // 行数を設定
    tw->setRowCount(ROWS);
    // 列数を設定
    tw->setColumnCount(COLS);

    // ヘッダを設定
    for(int col = 0; col < COLS; col++) {
        tw->setHorizontalHeaderItem(col, new QTableWidgetItem(tr("Header:%1").arg(col)));
    }

    // テーブルにitemを設定
    for(int row = 0; row < ROWS; row++) {
        for(int col = 0; col < COLS; col++) {
            QTableWidgetItem *item = new QTableWidgetItem(tr("hogehogehoge-%1,%2").arg(col).arg(row));
            tw->setItem(row, col, item);
        }
    }

    // 最後の列をウィンドウのサイズ似合わせていっぱいに広げるように設定する。
    tw->horizontalHeader()->setStretchLastSection(true);

    // ダブルクリックで編集できるようになるんだけど、それをできなくする。
    tw->setEditTriggers(QAbstractItemView::NoEditTriggers);

    // 最下行へスクロール
    tw->scrollToBottom();

    // 選択不可にする。
    tw->setSelectionMode(QAbstractItemView::NoSelection);

    // セルの幅を設定している文字の幅に調整する。
    tw->resizeColumnsToContents();
    // 列ごとに同じことをするには、↓こんな感じ
//    for(int col = 0; col < COLS; col++) {
//        tw->resizeColumnToContents(col);
//    }
}

Widget::~Widget()
{
    delete ui;
}

ソースの書いたコメント以上の説明はこれと言ってないw