| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Eclipse/QT Designer. Средства настройки MDI |
| Автор: JavaCraft 13.9.2007, 17:13 | ||||||||||||||
| В Eclipse/CDT/QT делаю MDI приложение. Возникли два вопроса. По документации, несмотря на разночтения, всё более менее понятно. Хотя, в конечно счете, не понятно, как правильно. Буду благодарен за разъяснения этой путаницы и как правильно реализовать MDI в QT4.3.1, желательно с ипользованием QT Designer? Разночтения вот какого плана: В QT3
в примерах QT 4.3.1
В документации QT 4.3.1 непонятно зачем добавили новую сущность QSubWindow:QWidget для дочерних окон. В примерах MDI этот класс нигде не применяется, но в документации сказано, что его нужно применять. Однако, код построенный той-же версией 4.3.1 QT Designer отличается как от примеров в документации по Q3, так и от примеров и от документации QT4.3.1
По сути, этот код не использует специальные MDI-классы и не реализует MDI интерфейс, а реализует два независимых окна. Изменять этот код бесполезно, т.к. он автоматически меняется в процессе разработки. Средств создания MDI интерфейса, т.е. как назначить и связать Главное и дочернее окно, в QT Designer я не нашел. Редактировать это в коде класса MainWindow не вижу смысла, т.к. этот код должен генериться автоматом и в случае ручного редактирования теряются преимущества Designer. Во всяком случае, его код менее понятен и более громоздок, чем человеческий. Всё-таки, хотелось бы разобраться и найти эти средства. |
| Автор: archimed7592 13.9.2007, 18:12 |
| При помощи дизайнера - никак. Что мешает отделить mdi-логику от остального внешнего вида, а потом воспользоваться композицией этих двух сущностей? |
| Автор: JavaCraft 13.9.2007, 18:38 | ||||||
| Ну в общем-то добился нужного результата ручными правками XML(UI) и коррекцией ошибок QT Designera, но дочего крииииво! Добавлено @ 18:40 Там окна имеют не те классы какие надо и я затрудняюсь отделить. Делается это так 1) Создаем MainWindow:QMainWindow и Child:QWidget - в дизайнере и закрываем. 2) Открываем MainWindow.ui как текст и меняем класс centralwidget с QWidget на QMdiArea, сохраняем изменение
3) Открываем код ui_MainWindow.h и добавляем строку MainWindowClass->setCentralWidget(centralwidget);
4) Аналогичную строку, на всякий случай, дублируем после создания интерфейса, и явно добавляем дочернее окно в родительское
5) Сохраняем проект. Применяем к проекту Index/Update With Modified Files 6) Компилируем, запускаем Кто знает как проще, поделитесь секретом? |
| Автор: JavaCraft 13.9.2007, 20:04 |
| Кстати, это далеко не единственный случай "Нововведений" Например, состав QPixmap изменился, пропала функция fromMimeSource, в результате код старых примеров стал несовметим с QT4. Ни в документации ни в новых примерах нет никаких пояснений. |
| Автор: JavaCraft 13.9.2007, 22:41 | ||||||||||
Почему не расчитан? С новыми классами нормально работает. Он не нерасчитан, а недоделан или сделан исходя из ошибочных представлений, т.е. с ошибкой. Ему ничего не мешает добавить эту строку при генерации кода из XML. Почему она пропадает...? Ложно считать программистов и программы непогрешимыми и безошибочными.
Не знаю, не нашел эту опцию. Нашел только Promoted widgets ... Как им пользоваться не понятно. Проще открыть через контекстное меню в Project Explorer/Open With/Text Editor и отредактировать. Это пример, и код дочернего окна туда поставлен, для простоты примера. В рабочей версии всё конечно по другому. Окна подгружаются из плагинов.
Зачем?! сгенерированного класса достаточно.
Эта строка туда поставлена только потому, что Дизайнер ее пропустил ибо не смог определить, что QMdiArea унаследован(через пару подклассов) от QWidget, и сделать также как для QWidget. И эта строка оттуда может исчезнуть, т.к. этот код автогенерируемый. Поэтому эта строка также вынесена в конструктор MainWindow. Если так как ты советуешь сделать, то дизайнер форм не при делах. В общем согласен, что так Мудро. Как я раньше говорил, без него всё вполне понятно и просто, но с ним быстрее, а мне крайне нужна скорость разработки. Я имел в виду дистрибутив/исходники с примерами. Ясен пень в инете всего нарыть можно.
Я к чему это заметил. К тому, что фактически для перехода с QT3 -> QT4 приходится переучиваться и переписывать код. Аналогично ожидать такое и для QT4 -> QT5 -> QT6 и так далее в лучших традициях M$. Изучать и чтобы за это(за изучение) платили, да ради бога, но самому Деньги жалко платить(=выбрасывать) за такое "удовольствие"! Впрочем это оффтопик. |
| Автор: archimed7592 13.9.2007, 23:59 | ||||||||
А ты вот возьми и разберись. Тебя интересовало, как это сделать именно в дизайнере или меня? Тебе это нужно или мне?
Да проще вообще ручками интерфейс писать - не переломишься.
Логичней пояснения давать в оффициальной документации, а не в примерах - нафига новичку, читающему примеру, подробности о том, что было в версии Qt, древний как дерьмо мамонта? И нарыто было не в инете, а в assistant'е - советую переодически им пользоваться.
Ну ты с MS не сравнивай - земля и небо. Ничему переучиваться не нужно. Тебе дали новые инструменты, а старые просто положили на другую полочку. Не хочешь переучиваться - бери инструменты с другой полочки(Q3XXX). Code Less - Create More © Trolltech. |
| Автор: JavaCraft 14.9.2007, 00:59 | ||||||
Мне. Потому и спрашиваю. А этот инструмент, ИМХО инопланетяне для инопланетян делали. Я всё там изрыл, но где там волшебная кнопка так и не нашел. Да и не то он делает, что нужно. Аналогичная задача решается в Delphi двумя способами 1) Через редактор свойств устанавливается тип окна. 2) В тектовом редакторе изменяется описание формы, которое автоматически применяется. И никаких дополнительных тулзов не требуется. А этот тулз что-то ваще не то делает. Если ты при помощи него добился нужного эффекта, так прямо и напиши последовательность действий, чего флейм разводить.
Неа. Нафига, например, программисту читать прошлогодние или упаси бог еще более древние толмуды. Да и вообще, правильная дока только сегодня и только в каждой последней версии, а антиквариат типа K&R и т.п. ф топку, да? Зачем мне покупать толмуд по QT4, если уже есть версия QT4.3.1?
Ага также как с .NET 1 на NET 2, 3 там такой же полет мысли. Это у них там Экстрим программинг, а у нас тут из-за них экстрим гемор. |
| Автор: archimed7592 14.9.2007, 11:17 | ||||||||||||
Лучше всё равно не скажу:
Претензии не по адресу. Тебя не устраивает - напиши в суппорт, может учтут. Заметь, всех остальных всё устраивает. Ну или второй путь: снести Qt и пользоваться Delphi. Тебя заставляет кто-то что ли?
У меня времени нет экспериментами ради тебя заниматься. Появится время - может быть разберусь и распишу что и как.
Действительно, читать ему это незачем. Только я не пойму к чему ты это сказал.
Что-то у тебя мысль несвязная пошла. Сам себя опровергаешь
Действительно, незачем. Попробуй как-нибудь в коммандной строке набрать assistant - бесплатный толмуд по самой последней(точнее по установленной) версии Qt.
1. Провели анализ и придумали систему, превосходящую по всем параметрам старую. 2. Ввели эту систему в новой версии. 3. Убрали старую систему из новой версии. 4. Оставили возможности работы со старой системой. Чё неустраивает? Будь ты на их месте ты как бы сделал? |
| Автор: JavaCraft 14.9.2007, 17:24 | ||||
А фигли тогда пукать не по делу. Оказывается, ты даже не пробовал. Вот пойди ка сам сначала разберись, а потом советы давай. Это у меня времени мало, а у тебя его видать завались. Тема себя исчерпала, а проблема уже решена. |
| Автор: archimed7592 14.9.2007, 18:27 | ||||||
Ха-ха... Это ты у нас ..., который может 10 постов спорить "какую же надпись выдаёт инсталятор в таких-то условиях" Вот ui, полученный исключительно тыканием по кнопкам в дизайнере(promote to... и иже с ними):
Вот хидэр, который генерирует uic:
Я тебе правильный совет дал. То что ты не хочешь ничего сделать для того, чтобы разобраться самому, без подтирания тебе соплей - твои проблемы. А указывать чего и кому давать жене своей будешь. |
| Автор: JavaCraft 14.9.2007, 18:59 | ||
| Мне твоих советов не надо, т.к. в большинстве случаев они не по существу и не от том, как и в этом случае.
|
| Автор: archimed7592 14.9.2007, 19:31 | ||
Ой, а за мат и забанить могут. |