Могу ли я использовать Qt как библиотеку C++ без использования ее UI framework

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

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

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

Фабиан

6 ответов


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

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

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

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


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

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


конечно, вы можете использовать Qt toolkit без использования его библиотеки GUI.

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


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

 QT -= gui 

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


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


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