Russian Qt Forum

Qt => Общие вопросы => Тема начата: Tertium Organum от Май 08, 2007, 15:20



Название: аналог 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
И в конструкторе главного окна, и на первый ресайз главного окна (следующих нет пока не изменишь размер руками).
Нащет пламенной речи про куте - НУ ДЕРГАЕЦА ЖЕ ВСЕ, или нет? :)