generalização do mapeamento de um sistema multi-variável / camada
Eu escrevi uma aplicação comC ++ / QT que se comunica com um dispositivo para ler / escrever suas variáveis, coloca / as coloca em uma estrutura e as apresenta em um gui para ambos os propósitos de visualização / edição.
1) O dispositivo vem com um código c de exemplo que também define o protocolo de comunicação (de uma forma muito ruim) como:
#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
Então a variávelVAR_1
é representado por:MY_DEVICE_VAR_1
.
2) Eu tenho uma estrutura que contém todas as variáveis do dispositivo:
struct MyDeviceData
{
int var1;
double var2;
char var3;
bool var4;
.
.
};
É basicamente um armazenamento para / uma projeção dos dados lidos do dispositivo. Existem 4 tipos diferentes de variáveis POD.
3) Finalmente meu gui tem elementos gui para mostrar e editar a instância de MyDeviceData
class MyGuI
{
QLineEdit var1;
QLineEdit var2;
QComboBox var3;
QCheckBox var4;
.
.
};
Agora minhas perguntas são:
1) Estou fazendo o mapeamento deMY_DEVICE_VAR1
->MyDeviceData::var1
->MyGUI::var1
comif
eswitch/case
declarações com as quais não tenho orgulho. Qual seria a melhor maneira "programática" de fazer o mapeamento?
2) Quando o valor de um elemento gui é alterado, quero enviarsó valor atualizado para o cartão. além de substituir as funções de manipulador de eventos como "textChanged
, selectedIndexChanged
"etc. Existe algum método" mais inteligente "(QSignalMapper?)
3) Nesse tipo de projeto, é possível generalizar todo o trabalho pesado? (uma ferramenta de gerador de código? modelos?)