Пользовательский интерфейс Qt для существующего проекта C ++ - PullRequest
5 голосов
/ 29 августа 2009

Я уже написал программу на C ++ и хотел бы написать графический интерфейс для нее. Я понимаю, что Qt - замечательный инструмент, однако у Qt есть свои собственные классы, которые меня сильно смущают. Например: вместо String у Qt есть класс с именем QString ..

Мне интересно, могу ли я смешивать код C ++ и код Qt в C ++?

Ответы [ 6 ]

7 голосов
/ 29 августа 2009

Да, вы можете очень легко смешивать Qt и STL.

Графический интерфейс пользователя занимает QString с, но он автоматически создает эти формы std::string или char*, QStrings, возвращаемые из Qt, могут быть преобразованы в toStdString() или toAscii().

Qt включает в себя набор классов коллекций, но вам не нужно их использовать.

Qt хорошо выглядит, как современный C ++, есть несколько «дополнений» для обработки механизма сигналов и событий слотов, но это скорее сложность для среды сборки, чем для кода.

редактировать: счет благодарности

1 голос
/ 15 марта 2013

Я не рекомендую смешивать код std c ++ и код Qt вместе.

Допустим, ваш код на c ++ является логикой, а код Qt должен быть только для графического интерфейса. Используя шаблоны MVC / MVP или аналогично, разделите логику и пользовательский интерфейс.

Таким образом, в будущем было бы проще запускать ваш код с / без использования пользовательского интерфейса.

0 голосов
/ 29 августа 2009

Да, вы можете.

Я фактически сделал оболочку Qt-GUI для набора функций на основе Си. Никаких проблем с интеграцией Qt, только низкий уровень C (что приводит к утечке памяти ...).

Смотрите здесь: http://code.google.com/p/qhocr/

0 голосов
/ 29 августа 2009

Их можно использовать вместе.

C ++ имеет долгую историю, и реализация и поддержка STL развивались вместе с языком. Я думаю, что бывшая команда Trolltech решила, что у них недостаточно контроля над качеством и доступностью реализаций STL, чтобы библиотека Qt зависела от нее. В результате Qt имеет свой собственный QTL, заголовок QtAlgorithms и QString.

Они позаботились о том, чтобы сделать их совместимыми с STL:

  • большинство контейнеров имеют интерфейс, аналогичный интерфейсу STL (например: доступ итератора, push_back (), empty () и т. Д.)
  • Контейнеры Qt могут быть преобразованы в / из контейнеров STL (например, QVector :: toStdVector, QList :: fromStdList)
  • Контейнеры Qt могут использоваться с алгоритмами STL
  • QString можно преобразовать в / из std :: string и std :: wstring с помощью toStd (W) String / fromStd (W) String

Лично мне нравится QString больше, чем std :: string, он проще в использовании и более мощный.

0 голосов
/ 29 августа 2009

да! Qt - это то, что вы можете использовать в своем коде C ++. Qt в основном для GUI, но это хорошие классы для Socket, Containers, Network, ... Вы можете использовать STL и другие обычные классы или классы, предлагаемые Qt. Самое главное, что если вы используете Qt в своем коде перед основной компиляцией, вы должны выполнить мета-компиляцию, чтобы подготовить ее для своего компилятора. Вы должны заметить, что Qt не является стандартным, это означает, что, хотя он поддерживает Windows, Linux и Mac OS, он не будет использоваться на других платформах.

0 голосов
/ 29 августа 2009

короче говоря, да, вы можете! например, QString по сути является строкой и имеет метод toAscii (), так что вы можете легко использовать Qt для своих проектов. Хотя вы МОЖЕТЕ столкнуться с некоторыми проблемами при интеграции Qt в visual studio (при условии, что вы используете его), вы сможете смешивать код c ++ и код Qt (который находится в c ++)

...