2009-08-28 12 views
6

Zastanawiam się, dlaczego Qt używa Q przed każdą nazwą klasy, zamiast umieszczać wszystko w przestrzeni nazw. Czy istnieje jakiś szczególny powód, taki jak łatwe wyszukiwanie nazw, czy chodzi tylko o nazwy marek?Jakie są przesłanki dotyczące sposobu nazywania klas Qt?

+1

wiem, że to nitpicky, ale "Rational" powinno być "Uzasadnienie". –

+1

po prostu czai się. Osobiście, jako osoba, która nie jest rodzimym użytkownikiem języka angielskiego, lubię ją poprawiać. Zdecydowanie wolę być poprawiony niż używać błędnego słowa lub frazy bez wiedzy. –

+0

@Matthew Talbert Ja też zgadzam się ze Stefano, witamy się Matthew – yesraaj

Odpowiedz

7

Wierzę, że to jest historyczne. Przestrzenie nazw zostały wprowadzone do C++ około 1995 roku. Rozwój Qt rozpoczął się w 1991 roku, więc nie można było oczywiście używać przestrzeni nazw.

3

To może być problem z przenośnością. Przestrzenie nazw nie były/nie są obsługiwane przez każdy kompilator, więc konwencja nazewnictwa pomaga w ograniczaniu konfliktów nazw.

+1

domyślnie kod wygenerowany z Qt Designer używa ui :: namespace ... Podejrzewam, że to nie może być problem – yesraaj

+0

Tak, a Qt _daje_ ma przestrzeń nazw 'Qt'. Po prostu nie zawiera klas, tylko niektóre wyliczenia. –

2

Qt jest bardzo konserwatywny w zakresie funkcji języka C++, z których korzysta. Brak przestrzeni nazw, exceptions or RTTI. Zobacz także this article opisujące, dlaczego szablony nie są używane w obsłudze sygnałów/szczelin.

+1

Chociaż zgadzam się, że Qt jest konserwatywne, twój link do żadnych szablonów jest specyficzny dla mechanizmu sygnału/szczeliny. Qt zdecydowanie używa szablonów w wielu swoich kodach. Wyjątki i rzeczy RTTI mają być używane na urządzeniach wbudowanych, chciałbym postawić. Wiele wbudowanych aplikacji unika tych, które dodają. –

+0

To dobra uwaga i jest poprawna. Poprawi odpowiedź! –

0

Widząc, jak nie jest to pojedynczy kompilator C++ w lewo, że nie realizuje nazw, obecnie istnieje tylko jeden powód: Branding :)

+0

bez bieżącego kompilatora. ale jest mnóstwo ludzi, którzy wciąż używają starszych kompilatorów, którzy nie mogą/nie mogą uaktualnić do najnowszej wersji. Nie twierdzę, że jest to dobra sytuacja, ale czasami po prostu utknąłeś z użyciem starego, zgniatanego kompilatora, z dowolnej liczby przyczyn technicznych/nietechnicznych. – Glen

+0

Nawet jeśli wszyscy użyli nowych kompilatorów, które obsługują przestrzenie nazw poprawnie (i nie zgadzam się z Twoją instrukcją BTW - wciąż są obecne kompilatory, które nie obsługują poprawnie wszystkich niuansów przestrzeni nazw), wciąż jest * * * kodu Qt, że to używa aktualnej konwencji nazewnictwa. Czy spodziewasz się, że wszyscy zmienili swój kod Qt na nową konwencję nazewnictwa, aby używać przestrzeni nazw? – Thomi

+1

@Glen, Thomi: Qt obecnie używa przestrzeni nazw (od 4.0), więc każdy kompilator pozostawiony bez przynajmniej podstawowej obsługi nie jest już obsługiwany przez Qt (nie może być obsługiwany). –

2

Dokumentacja Qt oznacza namespaces, choć nie sprawdzić kod do zobacz, czy naprawdę są hakerem z publicznymi deklaracjami wewnątrz klasy. Przypuszczam, że reszta stara się unikać powodowania wszyscy potrzebują, aby zmienić nazwę wszystkiego, chociaż mogłyby one stanowić ścieżkę migracji gdyby chcieli, tak jak poniżej:

namespace Qt 
{ 
class Object { ... }; 
} 

#ifndef NO_OLD_DECLS 
typedef Qt::Object QObject; 
#endif 
0

Qt wykorzystuje prefiks Q jako część ich kodowania styl. Zazwyczaj służy to ułatwieniu czytania kodu i rozpoznawania tego, co jest.

Identyfikator że:

  • jest przedrostkiem „Q” i przyrostek „prywatne” to prywatna klasa wykorzystywane do szczegółów implementacyjnych i nie jest częścią API (np QPainterPrivate)
  • jest poprzedzona „Q” i nie z przedrostkiem „prywatny” jest publiczną klasy (np QWidget)
  • jest przedrostkiem „q” (małymi literami) jest funkcją globalną publicznych (np qRgb)

Przyjmowanie stylu kodowania i używanie go w sposób jednolity znacznie ułatwia innym osobom zrozumienie kodu, którego nie pisali.

Ref .: Qt Coding Style

Powiązane problemy