2014-09-11 4 views
9

Ho solo una domanda: è disponibile una definizione (o qualcosa di simile) se si sta compilando un codice per sapere se il flag della GUI è stato impostato?È disponibile una definizione per Qt gui?

Spiegherò meglio. Ho del codice che voglio riutilizzare per diversi programmi in QT. Ora alcune parti di questo codice sono utilizzate solo in applicazioni GUI (o migliori applicazioni di widget) e dipendono da QtGui e QtWidgets. Mi piacerebbe mettere queste parti in un blocco condizionale (#if o #ifdef) affinché vengano compilate solo nei progetti in cui sono incluse la GUI e/o le librerie di widget.

E, prima di suggerire questo, creare una libreria non è una soluzione. Preferirei definire ...

MODIFICA:
Probabilmente non mi sono spiegato chiaramente. Quello che sto cercando è la definizione associata all'inclusione della GUI. Esempio:

FILE MYFILE.H

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

PROGETTO A: nel file QMake scrivo:

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

PROGETTO B: nel file QMake scrivo:

QT  -= gui 

Ora, voglio includere QPainter.h solo nel progetto A. Sai qual è il flag di definizione impostato quando aggiungo il g ui libreria? Ho provato con QT_QTGUI_MODULE_H, ma non funziona (probabilmente perché viene utilizzato solo quando si compila la libreria qt).

+0

Questa ora sembra essere una domanda di QMake sulla definizione dei simboli del preprocessore. Dovremmo aggiungere il tag qmake? – drescherjm

+0

Ehm ... No, non si tratta di dire a QMake come definire un simbolo del preprocessore. È un "quale simbolo del preprocessore viene definito quando, attraverso QMake, aggiungo la funzione GUI?" domanda – frarugi87

risposta

10

Ok, l'ho trovato. Ispirato dalle risposte sono andato a scavare nei file generati automaticamente e, la ricerca attraverso i file lib, ho trovato

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

che ha la linea di

QT.gui.DEFINES = QT_GUI_LIB 

e poi ... Questa è la magia parola! :)

Ora, se metto

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

QPainter è incluso solo nei progetti GUI-enabled.

Grazie a tutti per il vostro aiuto!

+0

Sempre bello sapere questo. – Niall

+4

e se hai solo bisogno del core lib, è 'QT_CORE_LIB' – Zaiborg

0

In caso di dubbio circa qualche cosa in Qt, ricordare questo:

Qt non è "come il C++". È C++. Se è legale in C++, allora è legale in Qt. Alcune regole speciali arrivano con QObject (ad esempio l'ereditarietà multipla), ma se si tratta di qualcosa dal lato C++, quasi sempre funzionerà.

+0

Non sono d'accordo. Qt non è come il C++, non obbedisce a tutte le regole del C++ (come i modelli) e aggiunge regole proprie (moc, segnali e slot). Inoltre, il modello di proprietà in Qt è diverso da qualsiasi altra cosa in C++. Hanno persino aggiunto il proprio sistema di caratteri tipografici.Se desideri mantenere il buon senso, accetta che Qt sia un dialetto del C++. Sapere come C++ fa le cose è un buon inizio, ma a volte non è sufficiente per capire Qt. – nwp