Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Реальный размер QWidget

Автор: anater 6.10.2010, 10:45

Итак нубский вопрос.
Создаю свой виджет

Pb::pb(QWidget * parent)
:QWidget(parent)
{
std::cout << x() <<std::endl;
std::cout << y() <<std::endl;

std::cout << size().height() <<std::endl;
std::cout << size().width() <<std::endl;
};


и вкладываю их штук двадцать в QFrame.

Так вот кусок который выводит мне размеры явно гонит все виджеты пишет размером 640х480, хотя визуально получается максисмум 70х100.

Дело в том счто далее тут должна будет присутствовать графика и для нормальной отрисовки нуно знать реальные размеры и координаты.

Что нуно сделать чтобы их получить? HELP!!!

Заранее спасибо за вменяемые ответы :)

Автор: Алексей1153 6.10.2010, 10:50

а geometry() что возхвращает ?

Автор: anater 6.10.2010, 11:04

Цитата(Алексей1153 @ 6.10.2010, 10:50) *
а geometry() что возхвращает ?

аналогично. тоже что-то нереальное. но на экране товсе как надо :(
менеджер размещений все двадцать штук аккуратненько вписал во фрейм.
а вот рельные размеры никак... может имеет значение что я их пытаюсь получить еще в конструкторе?

Автор: wiz29 6.10.2010, 11:11

этот вызов нужно делать не в конструкторе, поставь его в resizeEvent и будет тебе счастье:)

Автор: Авварон 6.10.2010, 11:13

Да, именно это и имеет значение - Qt не знает как вы будете показывать свой виджет - через show(), showMaximized() или showFullScreen() и не может вернуть размер.

Автор: Алексей1153 6.10.2010, 11:20

в конструкторе он тоже должен работать. Но косяк не в этом. А в том, что вызывать для получения размеров нужно в обработчике paintEvent - ведь там будешь графику рисовать свою

Автор: ufna 6.10.2010, 11:23

Цитата(Алексей1153 @ 6.10.2010, 12:20) *
в конструкторе он тоже должен работать. Но косяк не в этом. А в том, что вызывать для получения размеров нужно в обработчике paintEvent - ведь там будешь графику рисовать свою


дак в конструкторе оно и работает. Именно такой размер имеет виджет в случае автора. Только потом он его размещает к примеру на лейауте - и при размещении размер изменяется. А если сделать просто show() - то будет то, что size() в конструкторе и даст.

Потому эти данные нужно брать в paintEvent, если это именно для отрисовки нужно.

Автор: anater 6.10.2010, 12:09

Всем огромное спасибо за участие!

paintEvent куально помог!
:clapping:

Автор: Litkevich Yuriy 6.10.2010, 16:50

Цитата(Алексей1153 @ 6.10.2010, 15:20) *
в конструкторе он тоже должен работать.
нет, т.к. конструктор это ещё процесс создания объекта.

Автор: Алексей1153 6.10.2010, 17:22

Litkevich Yuriy, и что ? :) QWidget уже вызвался.

Автор: ufna 6.10.2010, 19:12

да блин, а оно че, не работает? В моем понимании "не работает" - значит приложение падает и ругается. Оно работает. Как и должно работать.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)