2010-12-14 27 views
5

Dotychczas Znam kilka sposobów #include klas Qt:Jaki jest właściwy sposób dołączania nagłówków Qt?

  • #include <QtModule>

    To doprowadza wszystkich klas określonego modułu, na przykład QDomDocument, QDomElement, QDomNode i wielu innych z #include <QtXml>.

  • #include <QClassName>

    Dodaje deklaracji określonej klasy jeden może chcieć wykorzystać, na przykład QEvent, QStringList, QFile.

  • #include <qcstyleheader.h>

    Ma to wpływ poprzedniej metody, za wyjątkiem inaczej patrząc nazwę nagłówka.

Zastanawiam się, czy istnieją inne sposoby na zajęcia Qt z zakresu #include? Czy są one równoważne, czy niektóre z nich są preferowane przez innych z jakichś powodów? Czy jest to zależne od #include - wewnątrz pliku .cpp lub .h? Czy wpływa to na szybkość kompilacji i rozmiar pliku wykonywalnego?

W skrócie, jaki jest najlepszy sposób na wykonanie?

Odpowiedz

9

Z reguły im więcej jest plików nagłówkowych, tym dłużej trwa kompilowanie każdego z modułów. (Oczywiście prekompilowane nagłówki renderują niektóre z tych wątków). Dlatego zazwyczaj chcesz dołączyć najmniejszą liczbę plików nagłówkowych koniecznych do prawidłowego zbudowania aplikacji.

Jeśli używasz tylko kilka klas w danej jednostce kompilacji, a potem po prostu należą do klas według nazwy, w nowoczesnym stylu:

#include <QEvent> 
#include <QPainter> 
#include <QFont> 

przypadku korzystania z dużej liczby zajęć z danego modułu , to chyba tak łatwo zawierać nagłówek moduł poziomu, takich jak:

#include <QtGui> 

zazwyczaj używać tylko starszą .h styl czy nowsza styl nagłówka nie istnieje.

Teraz prekompilowane nagłówki łagodzą wiele z tych problemów, kompilując raz do postaci binarnej. Ale wciąż jest koszt ładowania wstępnie skompilowanych symboli do pamięci i przeszukiwania ich w czasie kompilacji. Im mniej włożysz, tym bardziej wydajna będzie budowa.

+1

Ktoś wie, jak uzyskać autouzupełnianie w studio wizualnym, aby przestać fotografować w wersjach .h i nie daje mi innej opcji? Muszę walczyć z VS przez cały czas, gdy używam go w tym wydaniu: "NIE, chcę po prostu na tym poprzestać, nie dodawaj .h do tego, co właśnie napisałem, kiedy wstawiam zamknięcie!" -> [ESC] "ahh"> Całkiem cholernie denerwujące. –

+1

Myślę, że w 2010 roku można wyłączyć automatyczne uzupełnianie dla nagłówków. Przejdź do "Narzędzia-> Opcje-> Edytor tekstu-> C/C++ -> Zaawansowane-> Wyłącz #include auto-completion'. – RedX

1

To szwy jako ogólne zawierają pytanie. Odpowiedź jest prosta: dołącz tylko to, co musisz. W przeciwnym razie spowalniasz kompilację. W nagłówku spróbuj przesłać dalej. Jeśli to nie wystarczy, dołącz nagłówek deklarujący klasę.

1

Nie sądzę, aby istniał jakikolwiek uniwersalny prawo sposób włączenia ... Mój preferowany sposób jest drugi, ponieważ jest najłatwiejszy - po prostu robisz to dla każdej klasy, której używasz w pliku, o wiele mniej myślenie jest potrzebne.

Jeśli chodzi o prędkość kompilacji, tak, nagłówki Qt wymagają trochę czasu, aby skompilować. Jeśli chcesz skompilować szybciej, #include wszystko, czego potrzebujesz w plikach .cpp. Czasami musisz uwzględnić pliki .hh - jeśli zadeklarujesz klasę, zawsze musisz # dołączyć jej klasę podstawową i klasy dowolnych członków, które przechowujesz według wartości w klasie lub przekazywać wartości w funkcjach klasowych. Jednak dla tych członków i parametrów funkcji, które są zadeklarowane jako wskaźniki, inteligentne wskaźniki lub referencje, możesz zastąpić #include przez "class foo;" deklaracja. Nagłówek zostanie skompilowany szybciej, ale musisz jeszcze # dołączyć te klasy, ilekroć faktycznie używasz ich według wartości.

+0

"Nie sądzę, że istnieje jakikolwiek uniwersalny sposób włączania ..." Jest to niepoprawne, ponieważ Qt nie może w uzasadniony sposób wspierać opinii i kaprysów wszystkich. Sam Qt obsługuje '#include ' i '#include '. Jeśli robisz cokolwiek innego, jesteś sam: to może być w porządku, albo może nie być. Utrzymanie i trzymanie się stylu ma swoje zalety. –

1

Osobiście znalazłem znaczące korzyści (~ 30% czasu kompilacji?), Włączając w to wszystkie Qt, które używam w prekompilowanym nagłówku (example), a nie w każdym .h/.cpp w razie potrzeby. Oczywiście niewielkim minusem jest to, że możesz stracić z pola widzenia, na których bitach Qt twoje konkretne pliki źródłowe są szczególnie zależne, ale sam nie uważam tego za problem.

Powiązane problemy