Qt: как получить размер QTableView? - PullRequest
1 голос
/ 20 апреля 2011

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

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

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

Спасибо

1 Ответ

3 голосов
/ 20 апреля 2011

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

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

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

hide() ;
setAttribute (Qt::WA_DontShowOnScreen, false) ;
...