Должен название моих классов начинаться с 'Q' в QT?

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

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

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

Я видел несколько мест, где они назвали свои классы этим путем. Действительно ли это - хорошая вещь?

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

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

Править:

Большое спасибо всем, кто совместно использовал его мысли со мной.

РЕДАКТИРОВАНИЕ 2:

Кажется, что более новые версии спокойного Создателя теперь также выделяют имена классов, не начинающиеся с 'Q'.Мило!

16
задан Venemo 23 September 2011 в 09:31
поделиться

7 ответов

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

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

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

11
ответ дан 30 November 2019 в 15:24
поделиться

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

25
ответ дан 30 November 2019 в 15:24
поделиться

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

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

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

Qt::MyClass theClass;

use

venemo::MyClass theClass;

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

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

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

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

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

Вот что я делаю. Я пытаюсь, и обычно терпит неудачу, но, IMHO, все равно стоит попробовать, чтобы большая часть моего кода не знала, какой UI-фреймворк я использую. В частности, для операций рисования пользовательских виджетов я хочу, чтобы они снова работали позже, если я переключусь с WX на Qt. Таким образом, у меня есть собственный своего рода device_context, который является абстракцией того, что мне нужно. Затем у меня есть версия device_context для WX, которая вызывает вызовы отрисовки wxDC и содержит wxDC *.

Вы, конечно, узнаете это как Образец Моста.

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

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

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

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

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

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

8
ответ дан 30 November 2019 в 15:24
поделиться

Если вы планируете добавить к классам префикс «Q» только для того, чтобы Creator выделил их за вас, то вы можете обновить его до основной ветки Creators.

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

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

4
ответ дан 30 November 2019 в 15:24
поделиться
Другие вопросы по тегам:

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