August 22, 2009

[QT] Изменение размера виджета в зависимости от размера окна

Захотелось мне сделать таблицу, которая будет растягиваться или сжиматься в зависимости от размеров главного окна программы. Попытался в Qt дизайнере поиграться со свойствами таблицы, но ничего не получилось и пришел к следующим действиям:
Переопределил метод QMainWindow

protected:
void resizeEvent( QResizeEvent *__e );

следующим образом:

void MainWindow::resizeEvent(QResizeEvent *__e){
//resize main table
_ui.tb_data->resize( __e->size().width() - 3, __e->size().height() - 70 );
int c = _ui.tb_data->columnCount();
for ( int i = 0; i <>setColumnWidth( i, ( _ui.tb_data->width() / c ) - 2 );
}
}

где MainWindow - это класс наследник от QMainWindow,
_ui.tb_data - это QTableWidget
И таким способом у меня получилась таблица с динамическими размерами, а так же динамически, в зависимости от размера окна, меняется ширина колонок этой таблицы.

1 comment:

stepio said...

Если я Вас правильно понял, то подобного эффекта я добился так:
QTableView * view = new QTableView( this );
view->horizontalHeader()->setStretchLastSection( true ); /* растягивает колонки до нормальногоотображения всхе данных */
view->resizeColumnsToContents(); /* растягивает последнюю колонку чтоб заполнить невостребованное пустое место вконце */

Возможно Ваш вариант эстетичнее, но этот более Qt-нативный