Qt: как получить размер QTableView?

У меня есть QTableView, к которому привязана модель. Я заполняю модель (используя model->setItem), а затем хочу настроить ширину столбцов в таблице. Я хотел бы использовать относительный размер, поэтому первый столбец должен быть 60% от всей ширины, второй - 40%.

int tableWidthEffective = ui->tablePackages->width();
ui->tablePackages->setColumnWidth(0, tableWidthEffective * 0.6);

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

Спасибо


person mimic    schedule 20.04.2011    source источник


Ответы (1)


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

setAttribute (Qt::WA_DontShowOnScreen, true) ; // Prevent screen flicker
show() ;

QEventLoop EventLoop (this) ;
for ( ; ; )
  if (!EventLoop.processEvents()) break ;

hide() ;
setAttribute (Qt::WA_DontShowOnScreen, false) ;
person TonyK    schedule 20.04.2011
comment
Спасибо, я попробую это сегодня вечером. - person mimic; 20.04.2011