Могу ли я использовать Qt в качестве библиотеки C ++ без использования ее инфраструктуры пользовательского интерфейса - PullRequest
6 голосов
/ 26 декабря 2009

Имеет ли смысл использовать Qt для повышения производительности в приложении MFC, фактически не используя систему пользовательского интерфейса Qt?

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

Заранее спасибо за ваши мнения.

Fabian

Ответы [ 6 ]

10 голосов
/ 26 декабря 2009

Qt разделен на несколько модулей (QtGui является одним из них). Вы можете вручную выбрать, какие модули используются вашим приложением, связывая только те библиотеки, которые вам нужны.

Я не могу ответить, будет ли Qt взаимодействовать с MFC. Но, по крайней мере, QString предлагает преобразование в std :: string и char * / wchar, что должно вам помочь.

Документация Qt предоставляет обзор по модулям.

Как указал Даниэль ниже, вы должны знать о цикле событий. Однако можно использовать цикл обработки событий без модуля GUI. Вы можете вызвать processEvents в QCoreApplication, чтобы обработать все события в очереди и затем вернуться. Существует одно предупреждение с отложенным удалением, но в документации описан обходной путь.

7 голосов
/ 26 декабря 2009

Есть несколько служебных классов, которые вы можете использовать, но есть очень важное предостережение. Qt очень сильно зависит от цикла обработки событий. Цикл событий начинается с вызова QApplication::exec(). Теперь многие классы Qt зависят от сигналов и слотов, механизмом которых является Qt. Сигналы и слоты полностью зависят от цикла событий для правильной работы.

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

5 голосов
/ 26 декабря 2009

Конечно, вы можете использовать инструментарий QT без использования библиотеки GUI.

В зависимости от ваших потребностей, вы можете рассмотреть возможность использования boost библиотек, которые предоставляют разумный набор API, который помогает во многих отношениях Лично я использую его для создания сетевых сокетов многоплатформенным способом, но в нем есть намного больше.

3 голосов
/ 26 декабря 2009

да, вы можете, вы просто должны исключить модуль QtGui из вашего проекта (.pro), поскольку он включен по умолчанию.

 QT -= gui 

вот так используется только основной модуль.

2 голосов
/ 26 декабря 2009

В проекте Mumble используется Qt для клиента и сервера, причем на сервере вообще нет кода пользовательского интерфейса, при этом все еще широко используется остальная часть API Qt.

0 голосов
/ 26 декабря 2009

Если вы хотите использовать его только для классов коллекций, почему бы просто не использовать std :: library?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...