uogólnienie mapowania systemu wielu zmiennych / warstw

Napisałem aplikację za pomocąC ++ / QT który komunikuje się z urządzeniem w celu odczytu / zapisu zmiennych, umieszcza je w strukturach i prezentuje w gui dla celów przeglądania / edycji.

1) Urządzenie jest dostarczane z kodem próbki c, który również definiuje protokół komunikacyjny (w bardzo zły sposób), taki jak:

#define VALUE_1 0x12345678
#define VALUE_2 0xDEADBEEF
#define MY_DEVICE_VAR (VALUE_1 << 4) & (VALUE_2 >> 6)
#define MY_DEVICE_VAR_1 (MY_DEVICE_VAR & (VALUE_1 << 2)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
// .. and 300 more lines like above

Więc zmiennaVAR_1 jest reprezentowany przez:MY_DEVICE_VAR_1.

2) Mam strukturę, która przechowuje wszystkie zmienne urządzenia:

struct MyDeviceData
{
    int var1;
    double var2;
    char var3;
    bool var4;
        .
        .
};

Jest to zasadniczo przechowywanie / projekcja danych odczytanych z urządzenia. Istnieją 4 różne typy zmiennych POD.

3) Wreszcie mój gui ma elementy gui do wyświetlania i edytowania instancji MyDeviceData

class MyGuI
{
    QLineEdit var1;
    QLineEdit var2;
    QComboBox var3;
    QCheckBox var4;
       .
       .
};

Teraz moje pytania to:

1) Robię mapowanieMY_DEVICE_VAR1 ->MyDeviceData::var1 ->MyGUI::var1 zif iswitch/case wypowiedzi, z których nie jestem dumny. Jaki byłby lepszy „programowy” sposób mapowania?

2) Gdy zmieni się wartość elementu gui, chcę wysłaćtylko zaktualizowana wartość karty. oprócz nadpisywania funkcji obsługi zdarzeń takich jak „textChanged, selectedIndexChanged„itd. Czy są jakieś„ inteligentniejsze ”metody? (QSignalMapper?)

3) Czy w tym projekcie można uogólnić całą pracę z znoju? (narzędzie generatora kodu? szablony?)

questionAnswers(1)

yourAnswerToTheQuestion