2014-09-11 39 views
9

Mam tylko jedno pytanie: czy definicja (lub coś podobnego) jest dostępna, jeśli kompilujesz kod, aby wiedzieć, czy flaga GUI została ustawiona?Czy definicja jest dostępna dla Qt gui?

Wyjaśnię lepiej. Mam kod, który chcę ponownie wykorzystać dla różnych programów w QT. Teraz niektóre części tego kodu są używane tylko w aplikacjach GUI (lub lepszych aplikacjach widgetów) i zależą od QtGui i QtWidgets. Chciałbym umieścić te części w bloku warunkowym (#if lub #ifdef), aby mogły być kompilowane tylko w projektach, w których znajdują się GUI i/lub biblioteki widgetów.

I zanim to zasugerujesz, tworzenie biblioteki nie jest rozwiązaniem. Wolałbym zdefiniować ...

EDYCJA:
Prawdopodobnie nie wyjaśniłem się wyraźnie. To, czego szukam, to definicja związana z włączeniem GUI. Przykład:

PLIK myfile.h

#ifdef THE_QT_GUI_DEFINE_FLAG 
#include <QPainter.h> 
#endif 

PROJECT A: w pliku QMake piszę:

QT  += core gui 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

Projekt B: w pliku QMake piszę:

QT  -= gui 

Teraz chcę QPainter.h dołączyć tylko do projektu A. Czy wiesz, co to jest flaga definicji, kiedy dodaję g biblioteka ui? Próbowałem z QT_QTGUI_MODULE_H, ale to nie działa (prawdopodobnie dlatego, że jest używane tylko podczas kompilowania biblioteki qt).

+0

To teraz wydaje się być pytanie QMake dotyczące definiowania symboli preprocesora. Czy powinniśmy dodać tag qmake? – drescherjm

+0

Ehm ... Nie, nie chodzi o to, żeby QMake powiedzieć jak zdefiniować symbol preprocesora. Jest to "jaki symbol preprocesora jest zdefiniowany kiedy, poprzez QMake, dodaję funkcję gui?" pytanie – frarugi87

Odpowiedz

10

OK, znalazłem to. Zainspirowany odpowiedzi poszedłem kopać w automatycznie generowanych plików i przeszukując lib plików, znalazłem

Qt\5.2.1\msvc2010\mkspecs\modules\qt_lib_gui.pri 

który ma linię

QT.gui.DEFINES = QT_GUI_LIB 

a potem ... To jest magia słowo! :)

Teraz, jeśli mogę umieścić

#ifdef QT_GUI_LIB 
#include <QPainter.h> 
#endif 

QPainter jest włączone tylko w projektach GUI włączona.

Dziękuję wszystkim za pomoc!

+0

Zawsze miło to wiedzieć. – Niall

+4

i jeśli potrzebujesz tylko głównej biblioteki, jest to "QT_CORE_LIB" – Zaiborg

0

W razie wątpliwości o coś w Qt, pamiętaj:

Qt nie jest "jak C++". To jest C++. Jeśli jest legalne w C++, to jest legalne w Qt. Niektóre specjalne reguły przychodzą z QObject (np. Dziedziczenie wielokrotne), ale jeśli jest to coś ze strony C++, prawie zawsze będzie działać.

+0

Nie zgadzam się. Qt nie jest podobny do C++, nie przestrzega wszystkich reguł C++ (jak szablony) i dodaje własne reguły (moc, sygnały i sloty). Ponadto model własności w Qt nie jest podobny do niczego innego w C++. Dodali nawet swój własny system cech.Jeśli chcesz zachować zdrowy rozsądek, zaakceptuj, że Qt jest dialektem C++. Wiedząc, jak działa C++, to dobry początek, ale czasami nie wystarcza, aby zrozumieć Qt. – nwp

Powiązane problemy