Instanz einer Klasse erzeugen, Klasse abhängig von Startparametern

Alles rund um die Programmierung mit Qt
Antworten
freakonaleash99
Beiträge: 43
Registriert: 23. Juli 2017 12:35

Instanz einer Klasse erzeugen, Klasse abhängig von Startparametern

Beitrag von freakonaleash99 »

Hallo,

sorry, dass ich direkt 2 Beiträge erstelle, aber die Themen beschäftigen mich schon die ganze Woche.

Ich möchte eine Software erstellen, welche über eine RS232 Schnittstelle mit einem Gerät kommuniziert. Ich habe allerdings 4 verschieden Gerätetypen, die zwar grundsätzlich das Gleiche machen und gleiche Informationen liefern, aber anders angesprochen werden. Über ein .ini File soll der Software beim Starten mitgegeben werden, um welchen Gerätetyp es sich handelt.
Ich habe also 4 verschieden Klassen (RS232_var1, RS232_var2 usw.) für die Schnittstellenkommunikation über QSerialPort erstellt, welche jeweils die gleichen public-Funktionen haben (1x getValue() und 1x send(QString value)). Die Funktionen sind allerdings natürlich komplett anders implementiert.
Ich möchte nun über eine GUI die Werte lesen und senden. Dafür habe ich ein QMainWindow erstellt. Hier soll im Header schon eine Instanz der benötigten Klasse erstellt werden. Die Funktionen getValue bzw. send rufe ich dann über die GUI auf.
Mein Problem: Ich darf ja nur ein Objekt erzeugen und zwar genau von der Klasse, die ich benötige. Also brauche ich irgendwie sowas:

Code: Alles auswählen


if(COM_Type = "var1){
	RS232_var1 *com = new RS232_var1();
}
if(COM_Type = "var2){
	RS232_var2 *com = new RS232_var2();
}
if(COM_Type = "var3){
	RS232_var3 *com = new RS232_var3();
}
if(COM_Type = "var4){
	RS232_var4 *com = new RS232_var4();
}
COM-Type ermittel ich über QSettings und ein .ini-File.
Wenn ich sowas umsetzen könnte, bräuchte ich in den weiteren Funktionen nur noch com->getValue() bzw. com->send("xyz") aufzurufen. Allerdings geht sowas nicht. Ich hoffe ihr versteht mein Problem und könnt mir einen Tip geben, wie ich ein solches Vorhaben richtig umsetze. Ich dachte an eine gemeinsame Elternklasse und static_cast. Wäre das der richtige Ansatz?

Viele Grüße!
Antworten