Sto scrivendo un'utilità in C ++ con Qt che comunica con un dispositivo incorporato. Inizialmente il programma sarebbe stato utilizzato per tracciare i dati dal dispositivo, ma è stato aggiunto un nuovo requisito (non da me, nessun controllo su di esso). Quindi ora ha due modalità e quindi due classi:
- DevicePlotWindow
- DeviceDebugWindow
Entrambe le modalità fanno esattamente la stessa cosa tranne per l'output, ovvero i dati di plot e scrivono un messaggio di log sulla console di debug, rispettivamente.
Ecco dove diventa un po 'complicato. La seconda modalità era già uno strumento standalone esistente, che sarà deprecato e integrato in questo programma. La richiesta da parte degli utenti è di mantenere lo stesso aspetto e lo stesso aspetto del vecchio strumento.
Questo significa che nella mia utilità, ho due modalità funzionali molto simili, ma con un aspetto completamente diverso.
L'ho già implementato copiando e incollando gli elementi dell'interfaccia utente e le loro funzionalità in termini di comunicazione con il dispositivo. Ma odio rompere ASCIUTTO.
Qual è il modo migliore e più pulito per "condividere" gli elementi dell'interfaccia utente e i corrispondenti gestori di funzioni dei membri con entrambe le modalità (classi)? Sono a conoscenza dell'eredità, ma mi piacerebbe sapere cosa hanno in mente gli altri e il modo migliore per farlo.
Esempio:
class DevicePlotWindow : public QWidget {
private:
...
Plot plot_;
QSpinBox address_;
QSpinBox data_;
public:
...
void plot();
void on_address_value_changed(int val);
void on_data_value_changed(int val);
};
class DeviceDebugWindow : public QWidget {
private:
...
QPlainTextEdit console_;
QSpinBox address_;
QSpinBox data_;
public:
...
void write_console(QString const &msg);
void on_address_value_changed(int val);
void on_data_value_changed(int val);
};