Автор: 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 куально помог!
Автор: 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
да блин, а оно че, не работает? В моем понимании "не работает" - значит приложение падает и ругается. Оно работает. Как и должно работать.