В последнее время я проверял мой C ++, Ubuntu QQ. Я люблю фреймворк Qt для всего, особенно для создания GUI. Я стал довольно знаком с ним при использовании PyQt за последние несколько лет.
При использовании PyQt у меня были некоторые проблемы, которые сейчас более выражены при использовании C ++ с Qt: Qt имеет много расширений для C ++, которые специфичны для Qt - QString является лишь одним из распространенных примеров, не говоря уже об автоматизированной сборке мусора. Можно писать приложения на Qt, используя C ++, совсем не зная о C ++ и STL.
Возможно, мне скоро придется снова выходить на рынок труда, и я хотел бы иметь возможность рассмотреть позиции C ++ - но я боюсь, что слишком сильная привязанность к Qt ограничит мои способности работать с универсальным C ++, который когда-то был довольно грозным, но сейчас долго спят и ржавые.
Должен ли я избежать Qt? Буду ли я лучше использовать WxWidgets или GTK ++ для создания GUI?
Какая структура графического интерфейса лучше всего использовать, которая позволяет / требует наибольшего использования универсального C ++ и STL? Как сделать себя наиболее привлекательным программистом на C ++, когда дело доходит до каркасов GUI и т. Д.?
Я согласен с большинством похвал Qt, но вопрос был в том, что является лучшей структурой графического интерфейса для использования, которая позволяет / требует наибольшего использования универсального C ++ и STL? В этом отношении Qt немного шизофреничен: он дублирует контейнеры и алгоритмы STL со своими особенностями. Он также предоставляет контейнеры, которые отличаются от STL. Совместимость между Qt и STL не всегда гладкая. В некоторых случаях требуется несколько вызовов функций, чтобы добраться
std::string
доQString
и обратно.У wxWidgets есть опция для сборки STL, которая использует исключительно контейнеры STL - не существует параллельной вселенной с заменителями собственного производства, как в случае с Qt. Он также компилируется стандартным компилятором C ++, не требуя нестандартных расширений. Это качественный графический интерфейс, заслуживающий внимания.
Вы также можете взглянуть на gtkmm, который является оболочкой C ++ для GTK +. Это ближе к выполнению вашего первого требования, чем Qt.
источник
Я бы не стал слишком беспокоиться о том, чтобы не использовать определенные библиотеки STL, такие как std :: string или std :: iostream или std :: vector. QT-эквиваленты бывают разных вкусов, но они не так далеки, чтобы создавать какие-либо проблемы.
На мой взгляд, более идиоматическим отличием является стиль программирования, который тяжело использовать
new
для распределения. В то время как для программы QT это может быть хорошо для части Gui, преимущество C ++ и RAII в том, что вы можете фактически хранить много данных в стеке, а не в куче. При переходе на написание кода без GUI вы должны помнить об этом.источник
new/delete
вызовами это не так просто и подвержено ошибкам. В критических разделах (обработка больших данных) это может иметь значение, особенноdelete
вызовы могут быть довольно медленными.