Russian Qt Forum
Май 10, 2024, 08:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Реализация Undo/Redo действий пользователя в случае mdi интерфейса  (Прочитано 24932 раз)
nata267
Гость
« : Июнь 18, 2012, 15:22 »

Взято из QtDesigner. Реализация Undo/Redo действий пользователя в случае mdi интерфейса, используя QUndoStack, QUndoGroup, QUndoCommand. В качестве первого аргумента конструкторов классов QFormWindowManager, QFormWindow указатель на медиатор. Про который написано в этой теме http://www.prog.org.ru/topic_22148_0.html.
« Последнее редактирование: Июнь 19, 2012, 11:47 от nata267 » Записан
alexis031182
Гость
« Ответ #1 : Июнь 18, 2012, 16:14 »

Мне кажется интересней было бы, если бы это было Ваше собственное решение. Оно тогда к каким-нибудь завлекательно-увлекательным темам повело бы. А так похоже, что Вы справочник по внутренностям Qt взялись делать. Впрочем, может это и интересно, если оно так. Могу даже название предложить: "Кухня Qt. Вкуснее, чем у бабушки" Улыбающийся
Записан
nata267
Гость
« Ответ #2 : Июнь 18, 2012, 20:15 »

Мне кажется интересней было бы, если бы это было Ваше собственное решение. Оно тогда к каким-нибудь завлекательно-увлекательным темам повело бы. А так похоже, что Вы справочник по внутренностям Qt взялись делать. Впрочем, может это и интересно, если оно так. Могу даже название предложить: "Кухня Qt. Вкуснее, чем у бабушки" Улыбающийся

Действительно, интереснее было бы. Но к сожалению, тролли опередили меня. Вот эти вот их классы QUndoCommand, QUndoStack... в голову не приходит как решить задачу с помощью этих классов как то по другому чем у них. Кстати я не присваиваю себе их решение. Просто это единственное которое нашла на сегодняшний день. Предложите лучше)))  Вообще я предпочитаю пользоваться хорошим опытом других, если сама не могу придумать лучше. И вообще зачем  тогда qt? Пишите свои решения на чистом с++. Qt и всякие там решения нужны чтобы облегчить нам жизнь. Это тоже уже люди придумали и этим можно пользоваться. Я просто хотела пообсуждать эти решения. Потому что эти темы на этом форуме не обсуждаются вообще. Но видимо людям не очень это интересно. Ок.
« Последнее редактирование: Июнь 18, 2012, 20:24 от nata267 » Записан
alexis031182
Гость
« Ответ #3 : Июнь 18, 2012, 20:31 »

Действительно, интереснее было бы. Но к сожалению, тролли опередили меня.
Да, не раз замечал за ними этот грешок Смеющийся

Вот эти вот их классы QUndoCommand, QUndoStack... в голову не приходит как решить задачу с помощью этих классов как то по другому чем у них.
Да не обязательно лучше. С другой стороны, если с заделом на будущее использование, то как раз обязательно Улыбающийся

Кстати я не присваиваю себе их решение.
Я этого не говорил и не подразумевал. Тут я чист Улыбающийся

Просто это единственное которое нашла на сегодняшний день. Предложите лучше)))
Пока не могу (если вообще смогу Улыбающийся ), занят разработкой пула объектов. Тоже паттерн + фабрика.

Вообще я предпочитаю пользоваться хорошим опытом других, если сама не могу придумать лучше.
Оно наверное и правильно, сам также бывает поступаю. Впрочем, часто мне свой велосипед, пусть и о пяти колёсах, написать интереснее Улыбающийся
Записан
nata267
Гость
« Ответ #4 : Июнь 18, 2012, 20:36 »


Просто это единственное которое нашла на сегодняшний день. Предложите лучше)))
Пока не могу (если вообще смогу Улыбающийся ), занят разработкой пула объектов. Тоже паттерн + фабрика.


Вот то-то же...

Вообще я предпочитаю пользоваться хорошим опытом других, если сама не могу придумать лучше.
Оно наверное и правильно, сам также бывает поступаю. Впрочем, часто мне свой велосипед, пусть и о пяти колёсах, написать интереснее Улыбающийся

А мне интереснее копаться в чужих решениях)) Особенно после того как свое вышло о пяти колесах...

В данном примере простор для творчества открывается в реализации комманд. Их там не мало.
« Последнее редактирование: Июнь 18, 2012, 20:40 от nata267 » Записан
alexis031182
Гость
« Ответ #5 : Июнь 18, 2012, 20:42 »

Вот то-то же...
Да, не повезло Грустный а то бы я сразу эх, ух, ох Смеющийся

А мне интереснее копаться в чужих решениях)) Особенно после того как свое вышло о пяти колесах...
Вот очень ценное качество, любимое всеми без исключения работодателями программеров - умение разбираться в чужом коде. Или всё же умение работать в команде выше ценится? Я так до сих пор и не определил Улыбающийся
Записан
alexis031182
Гость
« Ответ #6 : Июнь 18, 2012, 20:44 »

В данном примере простор для творчества открывается в реализации комманд. Их там не мало.
Попробуйте предложить вариант для творчества. Это будет интересно
Записан
nata267
Гость
« Ответ #7 : Июнь 18, 2012, 21:00 »

В данном примере простор для творчества открывается в реализации комманд. Их там не мало.
Попробуйте предложить вариант для творчества. Это будет интересно

Надоело оправдываться( Никто не сказал - спасибо, крутое решение. Все молчат и не хотят ни в чем разбираться или что-то понимать. Блин, куда я со своей женской логикой...
Записан
alexis031182
Гость
« Ответ #8 : Июнь 18, 2012, 21:28 »

Надоело оправдываться(
Эм Шокированный

Никто не сказал - спасибо, крутое решение.
Добре, спасибо, крутое решение Улыбающийся

Все молчат и не хотят ни в чем разбираться или что-то понимать.
Тёмные люди, дикие нравы

Блин, куда я со своей женской логикой...
Наталья, если позволите, ну с чего Вы взяли, что Ваш труд не интересен и никому не будет нужен. Ну вот сей же час, может быть и нет, но спустя время обязательно оценят. Тут много тёмных людей, я среди них первый, так что Вы не расстраивайтесь ни в коем случае. Мы догоним, каждый в своё время и на своей волне. Миру мир, аминь Улыбающийся
Записан
Akon
Гость
« Ответ #9 : Июнь 18, 2012, 23:44 »

2nata267:
Вам действительно можно дополнять каталоги паттернов ссылками на современное применение - будет полезная информация.

имхо, но в "кладовой готовых решений" должны приводиться готовые решения, а не паттерны, например, "Частный случай механизма сигнал-слот", "Виджет просмотра PDF-файлов" и т.п. Вот если бы вы сделали, например, в достаточной степени абстрактную реализацию какого-нибудь паттерна (например,  "Частный случай механизма сигнал-слот" покрывает фундаментальный паттерн "наблюдатель"), то это бы было очень интересно.
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Июнь 19, 2012, 09:07 »

Надоело оправдываться( Никто не сказал - спасибо, крутое решение. Все молчат и не хотят ни в чем разбираться или что-то понимать. Блин, куда я со своей женской логикой...
Очень даже "туда", повторюсь, тема паттернов интересная и нужная. Да, разбираться не хотят, понимать тоже. Потому что нужно менять форму/стиль обсуждения.

Ну действительно, на фига мне изучать подробности тех диаграмм и даже вообще знать про паттерн "команда"? Есть простой, понятный пример "undo", откомпилил, посмотрел, сделал по образцу. Все - результат налицо.

Однако если внимательнее посмотреть на тот же пример "undo", или начать интенсивно пользовать этот метод - возникают серьезные проблемы. Есть желание - обсудим. А нет, "мы и так все знаем" - ну и не надо, нет проблем.
Записан
alexis031182
Гость
« Ответ #11 : Июнь 19, 2012, 10:33 »

Вроде кучу паттернов уже перебрали, а не можем даже разобраться в том, а что же нам интересно обсуждать, с чем интересно разобраться. Вот лично мне больше про фабрику тема понравилась, но и то только потому, что урвал на свою сторону значительный кусок "одеяла", оставив ТС, по большому счёту, без оного Улыбающийся Поэтому сейчас, сожалея о ранее содеянном, спрошу Вас, Igors, об означенных Вами проблемах с "undo".
Записан
nata267
Гость
« Ответ #12 : Июнь 19, 2012, 11:23 »

Надоело оправдываться( Никто не сказал - спасибо, крутое решение. Все молчат и не хотят ни в чем разбираться или что-то понимать. Блин, куда я со своей женской логикой...
Очень даже "туда", повторюсь, тема паттернов интересная и нужная. Да, разбираться не хотят, понимать тоже. Потому что нужно менять форму/стиль обсуждения.

Ну действительно, на фига мне изучать подробности тех диаграмм и даже вообще знать про паттерн "команда"? Есть простой, понятный пример "undo", откомпилил, посмотрел, сделал по образцу. Все - результат налицо.

Однако если внимательнее посмотреть на тот же пример "undo", или начать интенсивно пользовать этот метод - возникают серьезные проблемы. Есть желание - обсудим. А нет, "мы и так все знаем" - ну и не надо, нет проблем.


Уже интереснее... Что за метод "undo" ?? Очень было бы интересно в нем разобраться. А кстати чем плох метод который я привела (не считая того, что он написан не мной)??
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Июнь 19, 2012, 11:34 »

Уже интереснее... Что за метод "undo" ?? Очень было бы интересно в нем разобраться. А кстати чем плох метод который я привела (не считая того, что он написан не мной)??
Не метод, а пример "undo" в Qt Examples. Он использует ту же технику что Вы привели. Вот на нем предлагаю обсудить проблемы архитектуры - если Вы не против
Записан
nata267
Гость
« Ответ #14 : Июнь 19, 2012, 11:55 »

В данном примере опять используется медиатор из предыдущей темы. Для связи окон с менеджером окон. Вот этот код идет в конструкторе окон:

Код:
 if (FormWindowManager *manager = qobject_cast<FormWindowManager*> (core()->formWindowManager())) {
        m_commandHistory = new QUndoStack(this);
        manager->undoGroup()->addStack(m_commandHistory);
    }

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

Код:
 m_activeFormWindow->commandHistory()->setActive();

Таким образом действия Undo/Redo главного окна будут относится к активному дочернему окну.
« Последнее редактирование: Июнь 19, 2012, 11:59 от nata267 » Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 22.