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

StackOverflow https://stackoverflow.com/questions/27640

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Платформа миграции Qt / MFC

Платформа миграции Qt / MFC

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

Я надеюсь , что это поможет !

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top