Сведения о вопросе

krutoi

01:17, 4th August, 2020

Теги

c++   qt   mfc    

Интеграция Qt в устаревшие приложения MFC

Просмотров: 452   Ответов: 4

В настоящее время мы поддерживаем набор MFC приложений, которые довольно хорошо разработаны, однако пользовательский интерфейс начинает выглядеть усталым, и большая часть кода нуждается в довольно небольшом рефакторинге, чтобы устранить некоторые проблемы с дублированием и/или производительностью. Мы используем довольно много пользовательских элементов управления, которые обрабатывают все свои собственные чертежи (все написанные с использованием MFC).

В последнее время я все больше исследую Qt и преимущества, которые он предоставляет (кросс-платформенный и поддерживает то, что вы могли бы назвать более ориентированной на "professional" платформой для разработки UI).

Мой вопрос заключается в следующем: каков был бы наилучший подход к возможному переходу на фреймворк Qt ? Разве Qt хорошо играет с MFC? Может быть, лучше начать переносить некоторые из наших пользовательских элементов управления на Qt и постепенно интегрировать все больше и больше в наши существующие приложения MFC? (возможно ли это?).

Любой совет или предыдущий опыт ценится.



  Сведения об ответе

DINO

14:08, 21st August, 2020

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

Лично мне никогда не приходилось перемещать MFC-приложение в использование фреймворка Qt, но вот что может вас заинтересовать :

Qt/MFC Рамки Миграции

Qt/MFC Миграционной Системы

Это часть Qt-Solutions, поэтому вам придется купить лицензию Qt вместе с лицензией Qt-Solutions. (правка: больше нет )

Надеюсь, это поможет !


  Сведения об ответе

lesha

15:18, 6th August, 2020

(На самом деле это не ответ на ваши конкретные вопросы, но...) Я лично не использовал Qt, но это не бесплатно для коммерческой разработки Windows.

Вы смотрели на wxWindows , который является бесплатным? Хорошая статья здесь . Просто в качестве отступления, если вы хотите иметь единую кодовую базу для всех платформ, то вам, возможно, придется перейти от MFC - я почти уверен (кто-то исправит, если ошибется), что MFC нацелен только на Windows.

Еще один вариант-посмотреть на обновление пакета функций до MFC в SP1 версии VS2008 - он включает доступ к новым элементам управления,включая элементы управления лентой Office style.


  Сведения об ответе

baggs

11:22, 14th August, 2020

Это сложная проблема, и я подозреваю, что ответ зависит от того, сколько времени у вас есть. Вы получите гораздо лучший результат, если перенесете свои пользовательские элементы управления в Qt - если вы используете классы QStyle для выполнения фактического рисования, то вы получите тематический код прямо из коробки.

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

Итак, подводя итог, мой совет-запустить ветку, вырвать весь ваш старый код MFC и заменить его на Qt. Вы получите независимость от платформы (почти) бесплатно, и хотя это займет некоторое время, в конце концов вы получите гораздо более приятный продукт.

Последнее предупреждение: убедитесь, что вы нашли время, чтобы понять "Qt way of doing things" - в некоторых случаях это может быть совсем другой подход к MFC - последнее, что вы хотите сделать, это получить код MFC-style Qt.


  Сведения об ответе

prince

03:38, 20th August, 2020

Я уже руководил командой, занимающейся подобными вещами (не MFC - QT, но принципы должны работать).

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

Иногда нам приходилось рефакторировать некоторую бизнес-логику, чтобы обеспечить чистый интерфейс GUIs, но именно так это и должно было быть сделано в первую очередь tbh.

Теперь у нас был список GUIs, входов, выходов, тестов и интерфейса, которому должен был соответствовать инкапсулированный GUI.

Мы начали, проект за проектом, создавать эквивилантные GUIs к старым. Как только мы это сделаем, мы сможем вставить GUI туда, где был старый, восстановить и протестировать его. Сначала мы много спотыкались, но вскоре разобрались с распространенными ошибками и исправили их. Мы провели (я думаю) 612 диалогов, хотя над этим работала команда из примерно дюжины человек.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться