Насколько полезен Qt без этапа предварительной обработки?

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

Насколько пригоден Qt без шага предварительной обработки?

РЕДАКТИРОВАТЬ: Хорошо, люди, я не имею в виду этот вопрос как разрыв в Qt - слишком много фанатов Qt считают, что это так. Я не хочу обсуждать достоинства того факта, что Qt придумала этот инструмент предварительной обработки. Я понимаю, почему этот инструмент есть, и я понимаю, почему существуют большие части дизайна Qt, которые основаны на идее предварительной обработки.

Я никогда не использовал Qt, так что я не в состоянии разобраться с ним. Но я бы предпочел заплатить в письменном виде небольшую часть шаблона самостоятельно и не зависеть от разрыва всего процесса сборки. Я выиграл' t использовать Flex и Bison в моем текущем проекте по той же причине; если я не буду использовать эти инструменты, я определенно не собираюсь использовать другой вид предварительной обработки.

Так что, пожалуйста, не воспринимайте меня как копирование на Qt. Я не могу комментировать, насколько это хорошо или нет; Я не использовал это. Я просто хочу знать, возможно ли использовать его без moc .

60
задан Jason Plank 20 September 2011 в 12:51
поделиться

6 ответов

Qt не требует использования moc просто для его использования, это требуется, если вы создаете подкласс QObject и объявляете сигналы и слоты в своих пользовательских классах.

Это вполне разумно, moc предоставляет функции, которых нет в C++, сигналы/слоты, самоанализ и т.д.

Итак, чтобы сделать что-то минимально сложное, вам ПРИДЕТСЯ использовать препроцессор moc. Вы либо любите его, либо ненавидите.

26
ответ дан 24 November 2019 в 17:54
поделиться

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

Почему вам все равно: Учитывая характер «предварительной компиляции», если вы используете cmake или qmake, это не так уж и сложно с точки зрения неудобств. Если вы делаете что-либо с графическим интерфейсом в наши дни, вы все равно должны использовать графический дизайнер для большей части работы, поэтому вы уже добавляете некоторые шаги «прекомпиляции».

Относительно того, почему они это сделали: Возможно, вам будет интересно прочитать пояснение Qt: http://doc.qt.io/qt-4.8/templates.html

Оно сводится к следующему:

  • В шаблонном решении отсутствуют свойства и перегрузка
  • Решение moc предотвращает нарушение бинарной совместимости сигналов.
  • Анализ и модификация во время выполнения возможны с помощью нешаблонного механизма сигналов/слотов.

Кроме того, многопоточность сигналов/слотов также является преимуществом их системы.

2
ответ дан 24 November 2019 в 17:54
поделиться

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

Без moc вы не сможете

  • Использовать сигналы и слоты (которые практически необходимы для пользовательского интерфейса)
  • Использовать систему динамических свойств (необходима, среди прочего, для написания плагинов)
  • Используйте функции интернационализации
  • Рассчитывайте на помощь от кого угодно, когда ничего не работает

Если вы хотите использовать Qt, используйте moc. На самом деле, даже не беспокойтесь о moc — просто используйте QMake. Вы можете написать файл QMake .pro, который выглядит следующим образом:

TARGET = myApp

FORMS += MainWindow.ui

HEADERS += MainWindow.h

SOURCES += MainWindow.cpp
SOURCES += main.cpp

Все будет сделано автоматически. Или вы можете потратить все свое время, пытаясь понять, как избежать moc.

См. https://doc.qt.io/archives/qt-4.7/metaobjects.html и https://doc.qt.io/archives/qt-4.7/moc. .html#moc

4
ответ дан 24 November 2019 в 17:54
поделиться

Я не считаю необоснованным то, что Qt требует специального инструмента предварительной обработки, учитывая, насколько велика и обширна библиотека.

Другие столь же полные библиотеки, такие как Boost и GLib, не требуют специальных инструментов предварительной обработки, но широко используют стандартный препроцессор C. Qt можно было бы реализовать с использованием только препроцессора C, но с помощью собственного специального инструмента препроцессора он может обеспечить более чистый синтаксис и избежать многих ловушек, связанных с макросами препроцессора C.

Однако, как уже было сказано, вы можете использовать Qt без moc, а не все, что требует сигналов и слотов. Да, это включает все элементы графического интерфейса, но Qt никоим образом не просто библиотека графического интерфейса.

5
ответ дан 24 November 2019 в 17:54
поделиться

У меня нет полного ответа, но, насколько я понимаю, moc в основном (или, возможно, только) генерирует дополнительный код C++. Так что потенциально нет ничего, что вы не могли бы сделать сами вручную. Однако я понятия не имею, насколько это может быть утомительно и сколько времени потребуется для изучения всех необходимых концепций и деталей, которые входят в этот код.


Кроме того, отмечу: по моему мнению, причина, по которой вы так активно защищаете Qt и moc, заключается в том, что вы начали свой вопрос с резкой формулировки «Я думаю, что это неразумно», что легко интерпретируется как означающее, что вы не думаете, что moc должен был когда-либо существовать. Это отвлекает от вашего фактического вопроса. Думаю, было бы лучше просто сказать «moc не вписывается в мою систему сборки» или просто «у меня есть свои причины не хотеть его использовать».

4
ответ дан 24 November 2019 в 17:54
поделиться

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

3
ответ дан 24 November 2019 в 17:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: