Название: аналог WM_CREATE или onCreate Отправлено: Tertium Organum от Май 08, 2007, 15:20 где лучше делать настройку контролов на главном окне?
в конструкторе главного окна не получается - например, размер сплиттера на этом этапе неверный, поэтому задать ему размеры чайлдов корректно не получается (x, splitter.width - x). в винапи есть WM_CREATE, в VCL onCreate или чтото типа, а в QT? Название: аналог WM_CREATE или onCreate Отправлено: goer от Май 08, 2007, 18:49 Можно например в resizeEvent(QResizeEvent *e).
Название: аналог WM_CREATE или onCreate Отправлено: Разуев Максим от Май 08, 2007, 20:20 Можно в showEvent или обработать WM_CREATE через winEvent ( MSG * message, long * result ).
Название: аналог WM_CREATE или onCreate Отправлено: goer от Май 08, 2007, 21:05 showEvent вызывается перед показом виджета и в этот момент действительно есть вероятность получить невалидную геометрию виджетов.
WM_CREATE платформозависимое решение. Надо стараться не забивать гвозди микроскопом. Название: аналог WM_CREATE или onCreate Отправлено: Alex03 от Май 10, 2007, 07:45 А если в конструкторе:
QTimer::singleShot(0, this, SLOT(slotStart())); А в этом slotStart() всё что надо? добавлено спустя 1 минуту: Или в конструкторе же postEvent самому себе, и его последующая обработка. Название: аналог WM_CREATE или onCreate Отправлено: Tertium Organum от Май 10, 2007, 11:20 помогло повесить фильтр на сплиттер и при первом пришедшем ресайзе выставлять размер его частей
но мля это вобще неудобно - а если хренова туча сплиттеров? и прочей нечисти? В VCL на OnInit весь интерфейс уже собрался и таких размеров, каких надо. И тут-то можно его весь поперенастроить к ентовой матери Ну неужели в QT ничего такого нет?? Название: аналог WM_CREATE или onCreate Отправлено: pastor от Май 10, 2007, 11:33 2 Tertium Organum: goer предложил resizeEvent(QResizeEvent *e). Чем он тебя не устроил? Переопредели его для главного окна и выставляй размеры чего хочешь
Название: аналог WM_CREATE или onCreate Отправлено: goer от Май 10, 2007, 11:47 По поводу resizeEvent. Если размеры окна можно менять то однозначно надо класть политику размещения виджетов именно в этот хэндл, причем использовать относительные координаты.
Цитировать а если хренова туча сплиттеров? А если очень много виджетов и политики их размещения не особо мудренные, то можешь обратить внимание на verticalStretch () и horizontalStretch() - экономит кучу времени. Название: аналог WM_CREATE или onCreate Отправлено: Tertium Organum от Май 10, 2007, 13:26 pastor:
для одного сплиттера все ок если повеситься на ресайз окна - то у сплиттера еще не валидный размер не, стретч не нужен Название: аналог WM_CREATE или onCreate Отправлено: goer от Май 10, 2007, 14:09 Цитировать если повеситься на ресайз окна - то у сплиттера еще не валидный размер Ну если ты не хочешь использовать stretch тогда перехватывай resizeEvent сплитера или наследуйся от него и переопределяй хэндл. В чем проблема то? Название: аналог WM_CREATE или onCreate Отправлено: Tertium Organum от Май 10, 2007, 14:46 мля
проблема в том что видимо нет нормального сообщения, слота или чего там в этой куте есть, которое бы говорило - все, окно создано, все его контролы приобрели заданный в дизигнере размер и можно их подкрутить. вместо этого приходится для каждого сплиттера перехватывать ресайз. и вообще вся эта дибиловатая система лайаутов трещит по швам - не могу понять, почему я не могу задать у сплиттера размер положенных в него контролов в дизайн-тайме? нахрена он тогда нужен? вместо этого я трачу хренову тучу времени чтоб эти лайауты настроить (сравнительно со скоростью клепки VCL-ного интерфейса), а потом еще перехватывать ресайз и таки задавать размеры составляющих сплиттера. Максимальный размер левого контрола - 400, минимальный - 100, а я ну хоть убей хочу по дефолту 200 и вот так приходица. а сплиттеров - N. На каждый фильтр вешать? и что, мне еще прикажете наследоваться от контрола только для того чтобы задать его свойство? конечно, чо проще, зайди со стороны пожарной лестницы соседнего дома, заберись по ней на крышу, а с крыши - прямиком на свой дом, а там уже аккуратно по водосточной трубе к себе на балкон... :) а так проблем нет, все работает :) добавлено спустя 58 секунд: чем не устроили якоря разработчиков QT?... Название: аналог WM_CREATE или onCreate Отправлено: pastor от Май 10, 2007, 14:50 Цитата: "Tertium Organum" pastor: для одного сплиттера все ок если повеситься на ресайз окна - то у сплиттера еще не валидный размер Очень странно, у меня похожий вариант работает (задаеться ширина детей, выставляю ширину колонок для QTableWidget и т.д). Даже сделат только что тестовый пример, сплитер двигаеться без проблем Qt 4.2.3 Название: аналог WM_CREATE или onCreate Отправлено: Tertium Organum от Май 10, 2007, 14:53 ну вот так вот.
та же 4,2,3 свежесобранная на ресайз окна - размер не корректный, на ресайз сплиттера - верный там этот сплиттер в лайауте в лайауте в лайауте в лайауте, о как. может потому. окно сложное Название: аналог WM_CREATE или onCreate Отправлено: pastor от Май 10, 2007, 15:01 Цитата: "Tertium Organum" ну вот так вот. та же 4,2,3 свежесобранная на ресайз окна - размер не корректный, на ресайз сплиттера - верный там этот сплиттер в лайауте в лайауте в лайауте в лайауте, о как. может потому. окно сложное У тебя есть валидный размер главного окна при resizeEvent. Попробуй задавать размеры сплитеров исходя из этого. ЗЫ: Чтобы ты не говорил, лайауты в Qt - это очень мощная система. Размещение виджетов в Delphi нервно курит в сторонке по сравнению с ней. Название: аналог WM_CREATE или onCreate Отправлено: Tertium Organum от Май 10, 2007, 15:16 дергается очень. в куте.
нащет дельфи (упаси меня конечно бог писать на паскале, я писал только в билдере :) ) - все там хорошо, даже не знаю что там плохо - якорями решается все, главное - в реализации примитивно, а значит меньше глючит. разве что нет такого изврата, что каждый контрол по разному растет с изменением размера парента. у куте в этой области вообще колбаса. задумка хорошая но написано через жопу. при изменении размеров главного окна контролы дрыгаются как эпилептики... да и вобще от сатаны это все , а деваца некуда, надо косить :) Название: аналог WM_CREATE или onCreate Отправлено: goer от Май 10, 2007, 15:20 Цитата: "Tertium Organum" мля проблема в том что видимо нет нормального сообщения, слота или чего там в этой куте есть, которое бы говорило - все, окно создано, все его контролы приобрели заданный в дизигнере размер и можно их подкрутить. вместо этого приходится для каждого сплиттера перехватывать ресайз. и вообще вся эта дибиловатая система лайаутов трещит по швам - не могу понять, почему я не могу задать у сплиттера размер положенных в него контролов в дизайн-тайме? нахрена он тогда нужен? вместо этого я трачу хренову тучу времени чтоб эти лайауты настроить (сравнительно со скоростью клепки VCL-ного интерфейса), а потом еще перехватывать ресайз и таки задавать размеры составляющих сплиттера. Максимальный размер левого контрола - 400, минимальный - 100, а я ну хоть убей хочу по дефолту 200 и вот так приходица. а сплиттеров - N. На каждый фильтр вешать? и что, мне еще прикажете наследоваться от контрола только для того чтобы задать его свойство? конечно, чо проще, зайди со стороны пожарной лестницы соседнего дома, заберись по ней на крышу, а с крыши - прямиком на свой дом, а там уже аккуратно по водосточной трубе к себе на балкон... :) а так проблем нет, все работает :) добавлено спустя 58 секунд: чем не устроили якоря разработчиков QT?... Видимо проблема в том что ты не хочешь посмотреть на другой вариант решения задачи, а пытаешься провести аналогию в дельфями и прочими визуал басиками... Все-таки разберись как работает horizontalStretch() и verticalStretch(), а не плюйся по поводу того как неудобно в кути лабать формочки. Я работал и с дельфями, и с басиками, у них похожие системы размещения виджетов на формах, но хочу тебя заверить что в кути эта система нашла точное математическое и логическое выражение. Если до вечера не поймешь как работать со стретчами, обязуюсь выложить пример. добавлено спустя 3 минуты: Да, кстати Layout-ы тоже неплохо подходят для решения задачи позиционирования виджетов. Название: Re: аналог WM_CREATE или onCreate Отправлено: Gryz от Май 10, 2007, 15:25 Цитата: "Tertium Organum" где лучше делать настройку контролов на главном окне? в конструкторе главного окна не получается - например, размер сплиттера на этом этапе неверный, поэтому задать ему размеры чайлдов корректно не получается (x, splitter.width - x). размер неверный после выполнения setupUi(this); в конструктореглавного окна? Название: аналог WM_CREATE или onCreate Отправлено: Tertium Organum от Май 11, 2007, 08:16 И в конструкторе главного окна, и на первый ресайз главного окна (следующих нет пока не изменишь размер руками).
Нащет пламенной речи про куте - НУ ДЕРГАЕЦА ЖЕ ВСЕ, или нет? :) |