![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| JavaCraft |
|
||||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
В 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. Во всяком случае, его код менее понятен и более громоздок, чем человеческий. Всё-таки, хотелось бы разобраться и найти эти средства. Это сообщение отредактировал(а) JavaCraft - 13.9.2007, 17:19 |
||||||||||||||
|
|||||||||||||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
При помощи дизайнера - никак. Что мешает отделить mdi-логику от остального внешнего вида, а потом воспользоваться композицией этих двух сущностей?
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| JavaCraft |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Ну в общем-то добился нужного результата ручными правками 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, 19:08 |
||||||
|
|||||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Кстати, это далеко не единственный случай "Нововведений"
Например, состав QPixmap изменился, пропала функция fromMimeSource, в результате код старых примеров стал несовметим с QT4. Ни в документации ни в новых примерах нет никаких пояснений. |
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ложно считать ошибками результат применения инструмента, который не рассчитан на такое применение.
Разве не то же самое делает диалоговое окно дизайнера, вызываемое пунктом контекстного меню, AFAIR, "Promote to..."?
Более мудрым было бы следующее решение: Создать класс, унаследованный от QMdiArea и в его конструкторе делать необходимые действия(а именно, устанавливать this как centralWidget parent'а). Я что-то не пойму... У тебя что, всего одно дочернее окно? Зачем тогда нужен MDI? Если нет, то всё равно необходимо реализовывать интерфейс для регистрации окон. Почему бы не сделать это в классе, унаследованном от сгенерированного дизайнером(MainWindow в твоём случае)? Ну как же "никаких пояснений"... А это что?
Ессно не будет этого метода ибо с 4-й версии нету никаких mimesource'ов, как и, собственно фабрики в которых их можно было регистрировать. Это сообщение отредактировал(а) archimed7592 - 13.9.2007, 20:41 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| JavaCraft |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Почему не расчитан? С новыми классами нормально работает. Он не нерасчитан, а недоделан или сделан исходя из ошибочных представлений, т.е. с ошибкой. Ему ничего не мешает добавить эту строку при генерации кода из XML. Почему она пропадает...? Ложно считать программистов и программы непогрешимыми и безошибочными.
Не знаю, не нашел эту опцию. Нашел только Promoted widgets ... Как им пользоваться не понятно. Проще открыть через контекстное меню в Project Explorer/Open With/Text Editor и отредактировать. Это пример, и код дочернего окна туда поставлен, для простоты примера. В рабочей версии всё конечно по другому. Окна подгружаются из плагинов.
Зачем?! сгенерированного класса достаточно. Эта строка туда поставлена только потому, что Дизайнер ее пропустил ибо не смог определить, что QMdiArea унаследован(через пару подклассов) от QWidget, и сделать также как для QWidget. И эта строка оттуда может исчезнуть, т.к. этот код автогенерируемый. Поэтому эта строка также вынесена в конструктор MainWindow. Если так как ты советуешь сделать, то дизайнер форм не при делах. В общем согласен, что так Мудро. Как я раньше говорил, без него всё вполне понятно и просто, но с ним быстрее, а мне крайне нужна скорость разработки. Я имел в виду дистрибутив/исходники с примерами. Ясен пень в инете всего нарыть можно.
Я к чему это заметил. К тому, что фактически для перехода с QT3 -> QT4 приходится переучиваться и переписывать код. Аналогично ожидать такое и для QT4 -> QT5 -> QT6 и так далее в лучших традициях M$. Изучать и чтобы за это(за изучение) платили, да ради бога, но самому Деньги жалко платить(=выбрасывать) за такое "удовольствие"! Впрочем это оффтопик. Это сообщение отредактировал(а) JavaCraft - 13.9.2007, 23:18 |
||||||||
|
|||||||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
А ты вот возьми и разберись. Тебя интересовало, как это сделать именно в дизайнере или меня? Тебе это нужно или мне?
Да проще вообще ручками интерфейс писать - не переломишься.
Логичней пояснения давать в оффициальной документации, а не в примерах - нафига новичку, читающему примеру, подробности о том, что было в версии Qt, древний как дерьмо мамонта? И нарыто было не в инете, а в assistant'е - советую переодически им пользоваться. Ну ты с MS не сравнивай - земля и небо. Ничему переучиваться не нужно. Тебе дали новые инструменты, а старые просто положили на другую полочку. Не хочешь переучиваться - бери инструменты с другой полочки(Q3XXX). Code Less - Create More © Trolltech. Это сообщение отредактировал(а) archimed7592 - 14.9.2007, 00:00 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| JavaCraft |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Мне. Потому и спрашиваю. А этот инструмент, ИМХО инопланетяне для инопланетян делали. Я всё там изрыл, но где там волшебная кнопка так и не нашел. Да и не то он делает, что нужно. Аналогичная задача решается в Delphi двумя способами 1) Через редактор свойств устанавливается тип окна. 2) В тектовом редакторе изменяется описание формы, которое автоматически применяется. И никаких дополнительных тулзов не требуется. А этот тулз что-то ваще не то делает. Если ты при помощи него добился нужного эффекта, так прямо и напиши последовательность действий, чего флейм разводить.
Неа. Нафига, например, программисту читать прошлогодние или упаси бог еще более древние толмуды. Да и вообще, правильная дока только сегодня и только в каждой последней версии, а антиквариат типа K&R и т.п. ф топку, да? Зачем мне покупать толмуд по QT4, если уже есть версия QT4.3.1? Ага также как с .NET 1 на NET 2, 3 там такой же полет мысли. Это у них там Экстрим программинг, а у нас тут из-за них экстрим гемор. |
||||
|
|||||
| archimed7592 |
|
||||||||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Лучше всё равно не скажу:
Претензии не по адресу. Тебя не устраивает - напиши в суппорт, может учтут. Заметь, всех остальных всё устраивает. Ну или второй путь: снести Qt и пользоваться Delphi. Тебя заставляет кто-то что ли?
У меня времени нет экспериментами ради тебя заниматься. Появится время - может быть разберусь и распишу что и как.
Действительно, читать ему это незачем. Только я не пойму к чему ты это сказал.
Что-то у тебя мысль несвязная пошла. Сам себя опровергаешь
Действительно, незачем. Попробуй как-нибудь в коммандной строке набрать assistant - бесплатный толмуд по самой последней(точнее по установленной) версии Qt.
1. Провели анализ и придумали систему, превосходящую по всем параметрам старую. 2. Ввели эту систему в новой версии. 3. Убрали старую систему из новой версии. 4. Оставили возможности работы со старой системой. Чё неустраивает? Будь ты на их месте ты как бы сделал? -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||||||||
|
|||||||||||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
А фигли тогда пукать не по делу. Оказывается, ты даже не пробовал. Вот пойди ка сам сначала разберись, а потом советы давай. Это у меня времени мало, а у тебя его видать завались. Тема себя исчерпала, а проблема уже решена. |
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ха-ха... Это ты у нас ..., который может 10 постов спорить "какую же надпись выдаёт инсталятор в таких-то условиях" Вот ui, полученный исключительно тыканием по кнопкам в дизайнере(promote to... и иже с ними):
Вот хидэр, который генерирует uic:
Я тебе правильный совет дал. То что ты не хочешь ничего сделать для того, чтобы разобраться самому, без подтирания тебе соплей - твои проблемы. А указывать чего и кому давать жене своей будешь. Это сообщение отредактировал(а) Earnest - 14.9.2007, 20:00 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| JavaCraft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 8.2.2007 Репутация: нет Всего: 1 |
Мне твоих советов не надо, т.к. в большинстве случаев они не по существу и не от том, как и в этом случае.
Это сообщение отредактировал(а) Earnest - 14.9.2007, 19:48 |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ой, а за мат и забанить могут. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |