Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Начальные размеры элементов своего виджета 
V
    Опции темы
gordmiand
Дата 6.9.2011, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Пишу свой виджет – на виджете QWidget располагаются друг под другом 2 кнопки QPushButton с некоторыми их модификациями. Вопрос в том где именно лучше всего задать начальные настройки этим кнопкам – их стиль, взаимное расположение, а главное – их начальные размеры – ведь они (размеры) рассчитываются исходя из заданных на этапе проектирования размеров всего виджета QWidget (например по ширине кнопки равны их родителю QWidget, высота каждой = половине высоты QWidgetа), которые еще неизвестны при создании QWidgetа (по умолчанию размеры 100x30, хотя в дизайнере заданы другие фиксированные размеры)– то есть в конструкторе данного QWidget-класса эти операции не укажешь…создавать отдельную функцию для этого дела не хотелось бы – придется ее вызывать для каждого такого QWidget-виджета…а нет ли у виджета каких-либо методов (типа XXXevent(QEvent*)), которые автоматически вызываются (и желательно только один раз) после его (виджета) создания? Или подскажите свое решение такой задачки… 
PM MAIL   Вверх
RazrFalcon
Дата 6.9.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 29.7.2009

Репутация: 1
Всего: 1



resizeEvent?
PM MAIL   Вверх
maydjin
Дата 6.9.2011, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.1.2010

Репутация: нет
Всего: нет



Если что-то нужно сделать один раз, при создании обьекта, лучшее место imho конструктор.
Можешь задать параметры дочерних виджетов сразу после их создания и размещения  в конструкторе.
Если используешь дизайнер, то после вызова setupUI().
Если дочерние виджеты лежат в layout и у них установленны resizePolicy отличные от ignore, то размеры задаваемые через setGeometry игнорируються, и рассчитываються автоматически во время resizeEvent родителя.
Хотя для твоей задачи самое подходящее, на мой взгляд именно поиграться с layout'ами(можно тут).

Это сообщение отредактировал(а) maydjin - 7.9.2011, 13:07
PM MAIL   Вверх
gordmiand
Дата 6.9.2011, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



да и у меня была первая мысль именно про этот метод... void resizeEvent(QEvent *) почему-то не вызывается автоматически вовсе (для проверки внутри него ставил принт)...почему такое может быть? правильный ли параметр, тип возвращаемого значения? какие еще варианты есть?

Добавлено через 7 минут и 59 секунд
maydjin - как же я могу "задать параметры дочерних виджетов сразу после их создания и размещения  в конструкторе", если в расчетах высоты этих дочерних виджетов участвует высота их родителя, которая в его конструкторе еще неизвестна..
метода setupUI() в этом классе вообще нет - этот класс не имеет ui-формы, просто создает новый виджет...
никакие layout-ы я здесь не использую - создаю (new ...) на виджете (QWidget) 2 кнопки, после чего вторую двигаю ее move-ом вниз виджета на высоту верхней кнопки...   
PM MAIL   Вверх
borisbn
Дата 7.9.2011, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(gordmiand @  6.9.2011,  23:24 Найти цитируемый пост)
никакие layout-ы я здесь не использую

IMHO оч.зря. Ты сейчас пытаешься переписать функционал layout'ов. Зачем ???


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
maydjin
Дата 7.9.2011, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.1.2010

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) maydjin - 7.9.2011, 13:06
PM MAIL   Вверх
gordmiand
Дата 7.9.2011, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



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

хедер 
#include "QPushButton.h"

class DoubleButton : public QWidget
{
public:
    DoubleButton(QWidget *parent = 0);
  
   QPushButton *Btn1;
   QPushButton *Btn2;
...
};

cpp-шник
...
DoubleButton::DoubleButton(QWidget *parent) : QWidget(parent)
{
    Btn1 = new QPushButton(this);
    Btn2 = new QPushButton(this);
    
    Btn1->setFixedSize(width(),0.7*height());
    Btn2->setFixedSize(width(),0.3*height());
    Btn2->move(0,0.7*height());

}

таким образом размеры родителя width(), height() берутся по умолчанию 100 и 30, а не те, что заданы в дизайнере в полях minimumSize, maximumSize... так как решить сию задачу с использованием layout-ов (наверное verticalLayout)? 

Это сообщение отредактировал(а) gordmiand - 7.9.2011, 19:51
PM MAIL   Вверх
spyswamp
Дата 7.9.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



gordmiand, minimumSize, maximumSize - это совершенно не то. Кстати, не очень понятно, как ты говоришь про дизайнер и тот факт, что типа ui-формы нету. smile Что ж ты тогда в дизайнере смотришь?


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
gordmiand
Дата 7.9.2011, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



spyswamp - а почему я не могу на этапе проектирования задать фиксированные размеры виджету (что мне как раз и надо) через эти его свойства - minimumSize, maximumSize? 
именно мой класс, описывающий новый виджет (2 кнопки друг под другом) не содержит ui-форму, я использую этот свой виджет на других формах, на которых помимо него есть и другие стандартные виджеты...то есть вы все-таки предлагаете сделать в моем классе (описывающем 2х кнопочный виджет) отдельный метод по заданию начальных размеров этих 2 кнопок и вызвать его сразу после метода setupUi той формы, на которой я использую свой виджет? понятно, что так можно сделать, но хотелось бы, опять же, ничего дополнительного не вызывать и сразу после создания виджетов -кнопок задать им начальные размеры в зависимости от размеров их родителя, указанных уже на этапе проектирования  (про что я с самого начала и говорил - какой-то метод, который автоматически запустится после создания моего виджета (какой-то XXXevent наверное)) 
PM MAIL   Вверх
maydjin
Дата 7.9.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.1.2010

Репутация: нет
Всего: нет



Если цифры взяты не с потолка а нужны именно такие пропорции, то придеться наследоваться от QVBoxLayout, по выше приведенной мной ссылке можно почитать подробней.
Если же оно подобранно на глаз, то смотри приложение, если всё правильно понял то должно быть похоже.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  layout.ui 1,88 Kb
PM MAIL   Вверх
gordmiand
Дата 8.9.2011, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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-форма? да я и не форму просил, а пример кода по реализации такой задачки...
PM MAIL   Вверх
maydjin
Дата 8.9.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.1.2010

Репутация: нет
Всего: нет



В чем проблемма ? Переопредели функцию setGeometry() наиболее подходящего тебе менджера размещений, в самом начале вызови функция родителя, а затем подкорректируй её работу для конкретных элементов, получить элемент можно с помощью itemAt().
PM MAIL   Вверх
gordmiand
Дата 8.9.2011, 19:44 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



 smile 
maydjin - поясните, пож-та, сказанное Вами выше примером smile ..."а то у меня уже ум за разум заходит"
PM MAIL   Вверх
maydjin
Дата 8.9.2011, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.1.2010

Репутация: нет
Всего: нет



Оуу`кей.
Возможно не доконца понял как должны располагаться кнопки, но основную идею думаю проиллюстрировал.



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  layouts.tar.gz 3,87 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.