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

#qt #qtableview

#qt #qtableview

Вопрос:

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

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

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

Спасибо

Ответ №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) ;