Russian Qt Forum
Ноябрь 24, 2024, 15:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: аналог WM_CREATE или onCreate  (Прочитано 10943 раз)
Tertium Organum
Гость
« : Май 08, 2007, 15:20 »

где лучше делать настройку контролов на главном окне?
в конструкторе главного окна не получается - например, размер сплиттера на этом этапе неверный, поэтому задать ему размеры чайлдов корректно не получается (x, splitter.width - x).

в винапи есть WM_CREATE, в VCL onCreate или чтото типа, а в QT?
Записан
goer
Гость
« Ответ #1 : Май 08, 2007, 18:49 »

Можно например в resizeEvent(QResizeEvent *e).
Записан
Разуев Максим
Гость
« Ответ #2 : Май 08, 2007, 20:20 »

Можно в showEvent или обработать WM_CREATE через winEvent ( MSG * message, long * result ).
Записан
goer
Гость
« Ответ #3 : Май 08, 2007, 21:05 »

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

WM_CREATE платформозависимое решение. Надо стараться не забивать гвозди микроскопом.
Записан
Alex03
Гость
« Ответ #4 : Май 10, 2007, 07:45 »

А если в конструкторе:
QTimer::singleShot(0, this, SLOT(slotStart()));
А в этом slotStart() всё что надо?

добавлено спустя 1 минуту:

 Или в конструкторе же postEvent самому себе, и его последующая обработка.
Записан
Tertium Organum
Гость
« Ответ #5 : Май 10, 2007, 11:20 »

помогло повесить фильтр на сплиттер и при первом пришедшем ресайзе выставлять размер его частей

но мля это вобще неудобно - а если хренова туча сплиттеров? и прочей нечисти?
В VCL на OnInit весь интерфейс уже собрался и таких размеров, каких надо. И тут-то можно его весь поперенастроить к ентовой матери

Ну неужели в QT ничего такого нет??
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Май 10, 2007, 11:33 »

2 Tertium Organum: goer предложил resizeEvent(QResizeEvent *e). Чем он тебя не устроил? Переопредели его для главного окна и выставляй размеры чего хочешь
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
goer
Гость
« Ответ #7 : Май 10, 2007, 11:47 »

По поводу resizeEvent. Если размеры окна можно менять то однозначно надо класть политику размещения виджетов именно в этот хэндл, причем использовать относительные координаты.


Цитировать
а если хренова туча сплиттеров?


А если очень много виджетов и политики их размещения не особо мудренные, то можешь обратить внимание на verticalStretch ()  и  horizontalStretch() - экономит кучу времени.
Записан
Tertium Organum
Гость
« Ответ #8 : Май 10, 2007, 13:26 »

pastor:
для одного сплиттера все ок
если повеситься на ресайз окна - то у сплиттера еще не валидный размер

не, стретч не нужен
Записан
goer
Гость
« Ответ #9 : Май 10, 2007, 14:09 »

Цитировать
если повеситься на ресайз окна - то у сплиттера еще не валидный размер


Ну если ты не хочешь использовать stretch тогда перехватывай resizeEvent сплитера или наследуйся от него и переопределяй хэндл.
В чем проблема то?
Записан
Tertium Organum
Гость
« Ответ #10 : Май 10, 2007, 14:46 »

мля
проблема в том что видимо нет нормального сообщения, слота или чего там в этой куте есть, которое бы говорило - все, окно создано, все его контролы приобрели заданный в дизигнере размер и можно их подкрутить.
 
вместо этого приходится для каждого сплиттера перехватывать ресайз.

и вообще вся эта дибиловатая система лайаутов трещит по швам - не могу понять, почему я не могу задать у сплиттера размер положенных в него контролов в дизайн-тайме? нахрена он тогда нужен? вместо этого я трачу хренову тучу времени чтоб эти лайауты настроить (сравнительно со скоростью клепки VCL-ного интерфейса), а потом еще перехватывать ресайз и таки задавать размеры составляющих сплиттера. Максимальный размер левого контрола - 400, минимальный - 100, а я ну хоть убей хочу по дефолту 200 и вот так приходица. а сплиттеров - N. На каждый фильтр вешать?

и что, мне еще прикажете наследоваться от контрола только для того чтобы задать его свойство? конечно, чо проще, зайди со стороны пожарной лестницы соседнего дома, заберись по ней на крышу, а с крыши - прямиком на свой дом, а там уже аккуратно по водосточной трубе к себе на балкон... Улыбающийся

а так проблем нет, все работает Улыбающийся

добавлено спустя 58 секунд:

 чем не устроили якоря разработчиков QT?...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Май 10, 2007, 14:50 »

Цитата: "Tertium Organum"
pastor:
для одного сплиттера все ок
если повеситься на ресайз окна - то у сплиттера еще не валидный размер


Очень странно, у меня похожий вариант работает (задаеться ширина детей, выставляю ширину колонок для QTableWidget и т.д).  Даже сделат только что тестовый пример, сплитер двигаеться без проблем

Qt 4.2.3
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Tertium Organum
Гость
« Ответ #12 : Май 10, 2007, 14:53 »

ну вот так вот.
та же 4,2,3 свежесобранная
на ресайз окна - размер не корректный, на ресайз сплиттера - верный

там этот сплиттер в лайауте в лайауте в лайауте в лайауте, о как. может потому. окно сложное
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Май 10, 2007, 15:01 »

Цитата: "Tertium Organum"
ну вот так вот.
та же 4,2,3 свежесобранная
на ресайз окна - размер не корректный, на ресайз сплиттера - верный

там этот сплиттер в лайауте в лайауте в лайауте в лайауте, о как. может потому. окно сложное


У тебя есть валидный размер главного окна при resizeEvent. Попробуй задавать размеры сплитеров исходя из этого.

ЗЫ: Чтобы ты не говорил, лайауты в Qt - это очень мощная система. Размещение виджетов в Delphi нервно курит в сторонке по сравнению с ней.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Tertium Organum
Гость
« Ответ #14 : Май 10, 2007, 15:16 »

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

 у куте в этой области вообще колбаса. задумка хорошая но написано через жопу. при изменении размеров главного окна контролы дрыгаются как эпилептики... да и вобще от сатаны это все , а деваца некуда, надо косить Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.