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?
Odpowiedz
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.
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.
domyślnie kod wygenerowany z Qt Designer używa ui :: namespace ... Podejrzewam, że to nie może być problem – yesraaj
Tak, a Qt _daje_ ma przestrzeń nazw 'Qt'. Po prostu nie zawiera klas, tylko niektóre wyliczenia. –
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.
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ą. –
To dobra uwaga i jest poprawna. Poprawi odpowiedź! –
Widząc, jak nie jest to pojedynczy kompilator C++ w lewo, że nie realizuje nazw, obecnie istnieje tylko jeden powód: Branding :)
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
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
@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). –
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
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
- 1. Jakie są zasady dotyczące deklaratywnego sposobu ustawiania urządzenia przez AutoFixture?
- 2. Jakie są przesłanki nagłówka daty HTTP?
- 3. Jakie są sprawdzone metody nazywania modułów Maven?
- 4. Wskazówki dotyczące prywatnego nazywania pól Android są w porządku?
- 5. Jakie są przesłanki dotyczące składni wybranej do deklarowania znajomych z szablonu?
- 6. Jakie są przesłanki, aby zezwolić na ucieczkę znaku `?`?
- 7. Dobre wytyczne dotyczące nazywania właściwości bool
- 8. Jakie są założenia projektowe dotyczące HandleScope?
- 9. Jakie są ograniczenia dotyczące liczby zasobów Androida?
- 10. CSS3 - Jakie są najlepsze praktyki dotyczące wydajności?
- 11. Jakie są zalety korzystania z Qt?
- 12. Jakie są najlepsze praktyki i wskazówki dotyczące organizacji rozwiązania Xcode?
- 13. Jakie są konwencje nazewnictwa plików Java .properties?
- 14. Jakie są najlepsze praktyki dotyczące używania wymagania w Ruby?
- 15. Jakie są zasady dotyczące łańcuchowym z „==” i w Pythonie
- 16. Jakie są szybkie porady dotyczące zwiększania wydajności jQuery?
- 17. Jakie są dobre zasoby dotyczące algorytmów flokowania i roju?
- 18. Jakie są najlepsze praktyki dotyczące interakcji klient-serwer?
- 19. Jakie są niektóre wskazówki dotyczące debugowania Objective-c?
- 20. Jakie dokumenty dotyczące standardów kodowania Delphi są przestrzegane?
- 21. Jakie są dobre konwencje dotyczące Google Analytics na Androida?
- 22. Jakie są najlepsze praktyki dotyczące używania stref dostępności EC2?
- 23. Jakie są zasady dotyczące noexcept w domyślnych zdefiniowanych konstruktorach ruchu?
- 24. Jakie są najlepsze praktyki dotyczące oznaczania Docker Hub wersje
- 25. Jakie są dobre wskazówki dotyczące wyboru rozmiaru typów całkowitych?
- 26. Jakie są decyzje dotyczące dostępności typu dla konkretnej platformy?
- 27. JavaScript: jakie są wytyczne dotyczące definiowania nowych typów danych?
- 28. Pytania dotyczące klas scala: pytania
- 29. Jakie aplikacje w Google Play są zbudowane przy użyciu Qt?
- 30. Qt moveToThread: Jakie zasoby są dostarczane z obiektem?
wiem, że to nitpicky, ale "Rational" powinno być "Uzasadnienie". –
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. –
@Matthew Talbert Ja też zgadzam się ze Stefano, witamy się Matthew – yesraaj