![]() |
|
|
![]()
|
|
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Пишу свой виджет – на виджете QWidget располагаются друг под другом 2 кнопки QPushButton с некоторыми их модификациями. Вопрос в том где именно лучше всего задать начальные настройки этим кнопкам – их стиль, взаимное расположение, а главное – их начальные размеры – ведь они (размеры) рассчитываются исходя из заданных на этапе проектирования размеров всего виджета QWidget (например по ширине кнопки равны их родителю QWidget, высота каждой = половине высоты QWidgetа), которые еще неизвестны при создании QWidgetа (по умолчанию размеры 100x30, хотя в дизайнере заданы другие фиксированные размеры)– то есть в конструкторе данного QWidget-класса эти операции не укажешь…создавать отдельную функцию для этого дела не хотелось бы – придется ее вызывать для каждого такого QWidget-виджета…а нет ли у виджета каких-либо методов (типа XXXevent(QEvent*)), которые автоматически вызываются (и желательно только один раз) после его (виджета) создания? Или подскажите свое решение такой задачки…
|
|||
|
||||
| RazrFalcon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.7.2009 Репутация: 1 Всего: 1 |
resizeEvent?
|
|||
|
||||
| maydjin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Если что-то нужно сделать один раз, при создании обьекта, лучшее место imho конструктор.
Можешь задать параметры дочерних виджетов сразу после их создания и размещения в конструкторе. Если используешь дизайнер, то после вызова setupUI(). Если дочерние виджеты лежат в layout и у них установленны resizePolicy отличные от ignore, то размеры задаваемые через setGeometry игнорируються, и рассчитываються автоматически во время resizeEvent родителя. Хотя для твоей задачи самое подходящее, на мой взгляд именно поиграться с layout'ами(можно тут). Это сообщение отредактировал(а) maydjin - 7.9.2011, 13:07 |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
да и у меня была первая мысль именно про этот метод... void resizeEvent(QEvent *) почему-то не вызывается автоматически вовсе (для проверки внутри него ставил принт)...почему такое может быть? правильный ли параметр, тип возвращаемого значения? какие еще варианты есть?
Добавлено через 7 минут и 59 секунд maydjin - как же я могу "задать параметры дочерних виджетов сразу после их создания и размещения в конструкторе", если в расчетах высоты этих дочерних виджетов участвует высота их родителя, которая в его конструкторе еще неизвестна.. метода setupUI() в этом классе вообще нет - этот класс не имеет ui-формы, просто создает новый виджет... никакие layout-ы я здесь не использую - создаю (new ...) на виджете (QWidget) 2 кнопки, после чего вторую двигаю ее move-ом вниз виджета на высоту верхней кнопки... |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
IMHO оч.зря. Ты сейчас пытаешься переписать функционал layout'ов. Зачем ??? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| maydjin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Согласен с предыдущим оратором.
При чем даже если функциональность стандартных layout тебя не устраивает, всегда можно добавить наследника от наиболее близкой тебе политики размещения, и это будет в разы проще, реюзабельней и надежней чем велосепедизировать этот функционал вручную. Это сообщение отредактировал(а) maydjin - 7.9.2011, 13:06 |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
ммм...тогда подскажите пож-та конкретно на примере как мне решить задачку начального задания размеров дочерних виджетов с использованием размеров их родителя прямо в его конструкторе (когда этих родительских размеров,заданных в дизайнере, еще нет)
мой код:
таким образом размеры родителя width(), height() берутся по умолчанию 100 и 30, а не те, что заданы в дизайнере в полях minimumSize, maximumSize... так как решить сию задачу с использованием layout-ов (наверное verticalLayout)? Это сообщение отредактировал(а) gordmiand - 7.9.2011, 19:51 |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
gordmiand, minimumSize, maximumSize - это совершенно не то. Кстати, не очень понятно, как ты говоришь про дизайнер и тот факт, что типа ui-формы нету.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
spyswamp - а почему я не могу на этапе проектирования задать фиксированные размеры виджету (что мне как раз и надо) через эти его свойства - minimumSize, maximumSize?
именно мой класс, описывающий новый виджет (2 кнопки друг под другом) не содержит ui-форму, я использую этот свой виджет на других формах, на которых помимо него есть и другие стандартные виджеты...то есть вы все-таки предлагаете сделать в моем классе (описывающем 2х кнопочный виджет) отдельный метод по заданию начальных размеров этих 2 кнопок и вызвать его сразу после метода setupUi той формы, на которой я использую свой виджет? понятно, что так можно сделать, но хотелось бы, опять же, ничего дополнительного не вызывать и сразу после создания виджетов -кнопок задать им начальные размеры в зависимости от размеров их родителя, указанных уже на этапе проектирования (про что я с самого начала и говорил - какой-то метод, который автоматически запустится после создания моего виджета (какой-то XXXevent наверное)) |
|||
|
||||
| maydjin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Если цифры взяты не с потолка а нужны именно такие пропорции, то придеться наследоваться от QVBoxLayout, по выше приведенной мной ссылке можно почитать подробней.
Если же оно подобранно на глаз, то смотри приложение, если всё правильно понял то должно быть похоже. Присоединённый файл ( Кол-во скачиваний: 5 )
layout.ui 1,88 Kb |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
переход по присоединенному файлу layout.ui выдает только лишь строку "Form 0 0 293 186 Form 0 0 0 0 PushButton Qt::Horizontal QSizePolicy::Minimum 40 20 0 0 PushButton"...наверное ссылка неверная? где же ui-форма? да я и не форму просил, а пример кода по реализации такой задачки...
|
|||
|
||||
| maydjin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
В чем проблемма ? Переопредели функцию setGeometry() наиболее подходящего тебе менджера размещений, в самом начале вызови функция родителя, а затем подкорректируй её работу для конкретных элементов, получить элемент можно с помощью itemAt().
|
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
maydjin - поясните, пож-та, сказанное Вами выше примером |
|||
|
||||
| maydjin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 25.1.2010 Репутация: нет Всего: нет |
Оуу`кей.
Возможно не доконца понял как должны располагаться кнопки, но основную идею думаю проиллюстрировал. Присоединённый файл ( Кол-во скачиваний: 2 )
layouts.tar.gz 3,87 Kb |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |