Подтвердить что ты не робот

Если имя моих классов начинается с "Q" в Qt?

Когда я впервые начал работать с Qt, было очень обидно, что каждый класс имеет имя, начинающееся с "Q" , но теперь я привык к нему.

Я использую Qt Creator, и он очень хорошо подчеркивает код.
Однако он выделяет только имена классов, начинающиеся с "Q" . И это подчеркивает все, начиная с "Q" , даже если такого типа нет.
Он не выделяет имена пользовательских классов.

Это заставляет меня задуматься, следует ли мне также начинать все мои имена классов с "Q" ?
Или, по крайней мере, многоразовые?
(Я имею в виду те, которые я помещал в библиотеку классов, или повторно использовать в другом приложении.)

Я видел несколько мест, где они назвали свои классы таким образом. Это хорошо?

Я нашел эту страницу о соглашениях об именах Qt, но это не касается этого вопроса.

Кроме того, я не понимаю, почему Qt не использует пространства имен.

EDIT:

Большое спасибо всем, кто поделился с ним своими мыслями.

ИЗМЕНИТЬ 2:

Кажется, что более новые версии Qt Creator теперь также выделяют имена классов, не начиная с "Q" . Ницца!

4b9b3361

Ответ 1

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

Правильный способ - использовать пространства имен. Я думаю, что Qt не использовал их, потому что он довольно старый. В последнее время С++ сильно изменился.

И вообще, адаптация ваших соглашений об именах в соответствии с синтаксической раскраской - это плохая идея (даже если я понимаю, что это только заставило вас задуматься о вашем предложении).

Ответ 2

Я не понимаю, почему вы хотели бы применить это в своих собственных классах вообще. Пусть Qt делает то, что он хочет сделать с его соглашением об именах классов, и вы сами делаете.

Ответ 3

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

Ответ 4

Я не использовал Qt, но, если вы на самом деле не распространяете части Qt, я бы подумал, что очень плохое представление о том, чтобы префикс ваших собственных классов Qt, особенно из-за поведения (IMO), которое вы сообщаете от Qt Creator.

Это довольно распространено для группировки связанных классов вместе с префиксами, но сейчас это довольно датированный подход. Лучший способ сделать это - использовать пространства имен - это имеет преимущество, позволяющее определять область охвата, которую простой префикс вам не даст.

Если вы используете пространства имен, убедитесь, что ваше пространство имен отличает то, что вы делаете, от кода, который вы пишете, например, не используйте

Qt::MyClass theClass;

использование

venemo::MyClass theClass;

Я уверен, что вы получите картину. Вы также можете посмотреть на QtCreator и заменить редактор (или всю IDE) на то, что лучше выделяет код С++.

Ответ 5

Если вы планируете префикс своих классов с помощью "Q" только для того, чтобы заставить Creator выделить их для вас, вы можете захотеть обновиться до ветки мастера-авторов.

Создатель использовал "ручку Q", так как было просто дорого смотреть все время. Тем временем движок С++ значительно улучшился, и эти поиски можно выполнить без замедления пользовательского интерфейса, поэтому подсветка всех типов была активирована в последнее время.

К сожалению, это изменение больше не будет в Qt Creator 2.0, поэтому вам нужно будет использовать либо моментальные снимки, либо самостоятельно создать все это.

Ответ 6

Ну, вот что я делаю. Я стараюсь, и в общем случае терпит неудачу, но ИМХО стоит попробовать в любом случае, чтобы большинство моего кода не знали, какую инфраструктуру пользовательского интерфейса я использую. Для операций рисования пользовательских виджетов, в частности, я хочу, чтобы они снова работали позже, если я переключаюсь с WX на Qt. Таким образом, у меня есть собственный тип device_context, который является абстракцией того, что мне нужно. Затем у меня есть WX-специфическая версия device_context, которая делает вызовы draw wxDC и содержит wxDC *.

Вы, конечно, узнаете это как шаблон моста.

Итак, что я называю? Ну, нулевая причина назвать device_context wx_device_context, так как я вполне мог поговорить с Qt. Я пытаюсь Скрыть wx из моего кода, помните?

НО! Специфический подкласс WX, созданный от имени моих клиентов, называется wx_device_context и фактически находится в кармане пространства имен wx, созданном именно для таких целей.

Как это относится к вам? Ну, если у вас возникнет соблазн назвать класс QSomething, вы, вероятно, создаете какой-то пользовательский стиль, связанный с Qt определенным образом. Можете ли вы скрыть этот факт с помощью подкласса, предоставляя интерфейс, который могут использовать клиенты, это агностик библиотеки UI? Можно ли сделать виджет, который вы делаете, таким образом? Если вы когда-либо решили, что вам нужно использовать какую-либо другую библиотеку пользовательского интерфейса, вы застряли или можете просто переопределить некоторые базовые структуры, чтобы ваши пользовательские виджеты работали с новой библиотекой?

Дело в том, что ваш соблазн назвать класс QSomething - это "запах" - хотя он обычно встречается и обычно переносится - и вы можете подумать о том, что он указывает, и о том, что вы можете сделать, если вообще что-нибудь, о нем.

Ответ 7

Что касается пространств имен и Qt, Qt действительно использует пространства имен, просто не для всего. Qt работает во многих системах, не все из которых могут иметь полную поддержку пространств имен. Хотя существуют текущие версии Qt, это не означает, что все системы, на которых он работает, также обновились. Учитывая количество кода, используемого в Qt, поскольку преобразование всех было бы огромным делом; предполагая, что все компиляторы/платформы/системы Qt работают, не нужно было обрабатывать, чтобы переместить все в пространства имен.

Qt не нуждается в пространствах имен, у них есть схема именования, которая работает. Желая назвать ваши классы так, как делает Qt, потому что вы используете Qt, вы хотите, чтобы ваши классы были в пространстве имен Qt, потому что вы используете Qt. Я согласен с Ноем, что желание сделать это - "запах", и хотя в целом он терпит, все еще не очень хорошо. Иногда подражание - не самая искренняя форма лести.