[SOLVED] QT warunek kompilacji fragmentów kodu

0

Witajcie ,
piszę jeden program dla dwóch osób. Wersje różnią się jedynie kilkoma grafikami i w kilku miejscach wyświetlanym labelem.
czy jest jakaś możliwość żeby zdefiniować, którą wersję kompiluję i żeby wstawiało odpowiednie wartości.

np gdzieś na samym początku coś w stylu
#define WERSJA 01

a potem w plikach cpp
if(WERSJA == 01) tekst = "osoba 1";
if(WERSJA == 02) tekst = "osoba 2";

wygląda prosto ale problem jest taki, że to dość rozbudowany program i chciałbym mieć dostęp do wartości WERSJA z każdego miejsca w programie..

1

W pliku.pro masz zmienną DEFINES ale zastanów się nad innym rozwiązaniem (wczytywanie danych z resource'ów np i podmiana tylko ścieżki), bo takie definowanie prowadzi do niezłego bałaganu w kodzie.

0

problem sie robi przy mojej strukturze projektu:

projekt
-projekt.pro
>podprojekt_1
-podprojekt_1.pro
-pliki .h i .cpp
>podprojekt_2
-podprojekt_2.pro
-pliki .h i .cpp
>podprojekt_3
-podprojekt_3.pro
-pliki .h i .cpp

DEFINES użyłem w projekt.pro a ich wartości użyć potrzebuję w podprojektach. Nawet moja zmienna się pokazuje na liście podpowiedzi, ale niestety przy kompilacji wyrzuca że nie została zdefiniowana :/ znajdzie się na to sposób czy muszę definiować zmienną w pliku pro każdego z podprojektów?

@Edit
zrobiłem tak:
w projekt.pro dodalem
DEFINES += ZMIENNA=""treść""
a w odpowiednich plikach .cpp podprojektu
QLabel opis = new QLabel(tr(ZMIENNA));

1

Wrzuć to do .pri i inkluduj ten priw każdym pro. Albo ustaw zmienną systemową.

0

Coraz lepiej i bliżej celu.
w pliku pri musiałem zastosować zapis DEFINE +=ZMIENNA=""'treść'""
ponieważ bez ' wywalało undeclared treść.
teraz z kolei
w miejscu
QLabel opis = new QLabel(tr(ZMIENNA));
mam problem:
invalid conversion from 'int' to 'const char*'
Czy tak definiowana stała musi być liczbowa?
wg http://stackoverflow.com/questions/16244040/is-the-qt-defines-doing-the-same-thing-as-define-in-c może to być tekst..

@Edit

Kombinuję jak mogę ale jakoś to nie idzie :(
poniżej tak w skrócie kilka wariantów

DEFINE += -ZMIENNA="\"nazwisko\""
QLabel *label2 = new QLabel(ZMIENNA);
wywala że ZMIENNA niezadeklarowana

DEFINE += ZMIENNA="\"nazwisko\""
QLabel label2 = new QLabel(ZMIENNA);
błąd:invalid conversion from 'int' to 'QWidget
'

DEFINE += ZMIENNA="\"nazwisko\""
QLabel label2 = new QLabel(tr(ZMIENNA));
błąd:invalid conversion from 'int' to 'const char
'

QLabel *label2 = new QLabel();
label2->setText(QString::number(ZMIENNA));
:-1: błąd:[../output/podprojekt_1/tmp/aboutdialog.o] Error 1 Brak pliku:

QLabel *label2 = new QLabel();
label2->setText("");
:-1: błąd:[../output/podprojekt_1/tmp/aboutdialog.o] Error 1 Brak pliku:

jak najadę kursorem na ZMIENNA to w dymku z opisem pokazuje mi #define ZMIENNA 1
jak jakby nie była ona tekstem "nazwisko" tylko liczbą 1

@Edit
już prawie:

.pri
ZMIENNA= \"'nazwisko'\"
DEFINES += "OSOBA=$${ZMIENNA}"

cpp
new QLabel(OSOBA);

powyższe działa tak jak chciałem, niestety nie akceptuje spacji w zmiennej
ZMIENNA = \"'nazwisko imie'\"
powoduje błąd undeclared imie

0

DLA POTOMNYCH
jakby ktoś potrzebował i się do tego dokopał:

plik '*'.pri
OSOBA_DANE = \"'imie\ drugie_imie\ nazwisko'\"
DEFINES += "OSOBA=$${OSOBA_DANE}"

plik ''.pro
include('
'.pri)

plik '*'.cpp
QLabel *label = new QLabel(OSOBA);

1 użytkowników online, w tym zalogowanych: 0, gości: 1