Автор Тема: Qt Widgets & Layouts [решено]  (Прочитано 10144 раз)

Оффлайн Phantom

  • Завсегдатай
  • *
  • Сообщений: 98
    • Email
Qt Widgets & Layouts [решено]
« : 31.03.2009 02:08:44 »
~
« Последнее редактирование: 30.03.2012 21:14:54 от Phantom »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
Re: Qt Widgets & Layouts
« Ответ #1 : 31.03.2009 11:15:49 »
Почитайте литературу по Qt. Например, http://www.linuxcenter.ru/lib/books/qt3/qt3_5.phtml
http://www.opennet.ru/docs/RUS/qt3_prog/c3346.html — без основ вам будет очень тяжело.

Средства размещения Qt (аналогично GTK+ и Java Swing) гораздо гибче, чем примитив Lazarus и wxWidgets. Фактически они напоминают размещение элементов во вложенных таблицах: вертикальный и горизонтальный стек, таблица (в том числе с объединёнными ячейками), использование пружин. Запустите Qt Designer и поэкспериментируйте сначала там.

Цитировать
1) Как заставить layout принимать размер родительского виджета ?
Автоматически, если явно не указано обратное.
2) Изменять свой размер и размер вложенных виджетов при изменении родительского для layout элемента ?Автоматически, если явно не указано обратное.
Цитировать
Можно это все сделать из дизайнера или нужно прописывать обработку событий в коде ?
Можно и там и там. Designer формирует файл .ui, который можно подключить в runtime или сгенерировать код командой uic-qt3 или uic-qt4

Запустите KDevelop и создайте там проект Qt, чтобы посмотреть что и как работает.
Андрей Черепанов (cas@)

Drool

  • Гость
Re: Qt Widgets & Layouts
« Ответ #2 : 31.03.2009 15:59:56 »
...я работаю с QtCreator 1.0 / Qt 4.5.

А мне qdevelop понравился. Правда ничего сложнее дипломного проекта я в нем не делал.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
Re: Qt Widgets & Layouts
« Ответ #3 : 31.03.2009 20:26:32 »
Оказывается это особенность Qt-шного дизайнера, кидающего на форму вместо layout-а заменяющий его layout-widget,
который потом еще нужно преобразовать в настоящий layout не совсем очевидным телодвижением в контекстном меню.
Вы не правы. При сохранении *.ui и прогона его через uic-qt4 (к примеру) в коде создаются все нужные виджеты компоновки.
Андрей Черепанов (cas@)

Drool

  • Гость
Re: Qt Widgets & Layouts
« Ответ #4 : 01.04.2009 09:02:14 »
Одно время я присматривался к строго кроссплатформенным средствам разработки,
специализированной IDE для Qt тогда не нашел (про QDevelop знал, но не пробовал)...

qdevelop кроссплатформенный. На оффсайте есть сборка для винды.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
Re: Qt Widgets & Layouts
« Ответ #5 : 01.04.2009 12:17:24 »
Если сравнить содержимое первого и второго экземпляра ui файла,
то окажется что в первом layout представлен кодом <widget class="QWidget" name="...LayoutWidget">а во втором - кодом <layout class="Q...Layout" name="...Layout">
И во втором случае layout уже действительно начинает себя вести так, как написано в документации и книгах.
Только что проверил в Designer из Qt4 (libqt4-4.4.3) — виджеты одинаковые. Что при кидании, что при компоновке через меню. В Designer Qt3 кидать компоновку вообще нельзя, насколько я знаю (не нашёл в списке виджетов).
Андрей Черепанов (cas@)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
Re: Qt Widgets & Layouts
« Ответ #6 : 02.04.2009 17:43:28 »
Цитировать
Только что проверил в Designer из Qt4 (libqt4-4.4.3) — виджеты одинаковые. Что при кидании, что при компоновке через меню. В Designer Qt3 кидать компоновку вообще нельзя, насколько я знаю (не нашёл в списке виджетов).

Добрался наконец до оригинального Qt-шного Designer...

Да, действительно, в Qt3/Qt4 Designer на форму в принципе нельзя кидать компоновку, можно только компоновать виждеты через меню, тогда компоновка появляется сам собой и отображается в виде рамки. Во встроенном дизайнере QtCreator можно компоновку кидать явно. Но это ничего по сути не меняет.
Проверил — в Qt4 Designer можно.
Цитировать
Если просто на пустой форме выделить два виджета и сказать "layout in ..." в контекстном меню у выделенных виджетов - появляется рамка компоновки, но на форму она не растягивается до тех пор, та же команда не будет отдана родительскому виджету, т.е. в данном случае самой форме.
Естественно. Нужно выделить форму и выбрать компоновку. Тогда компоновка будет зависеть от родительского виджета (окна).
Андрей Черепанов (cas@)

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
Re: Qt Widgets & Layouts
« Ответ #7 : 06.04.2009 11:37:50 »
Возможно, но это оказалось не очевидно. Я по началу предполагал, что виждеты и компоновки автоматически цепляются к родителькому виджету на котором размещены, и был несколько озадачен такой двухрежимностью. С другой стороны, в этом наверняка есть свой смысл.
Это не двухрежимность. Дело в том, что дизайнер позволяет скомпонованный виджет перенести в группу, например. То есть при дизайне опредять родительский виджет нужно явно.
Андрей Черепанов (cas@)