ich habe eine von QMainWindow abgeleitete Klasse MainWindow, welche eine Membervariable vom Typ *UsbDevice hat.
Die Klasse UsbDevice implementiert einen usb-Treiber mit der libusb.
Im Konstruktor der Klasse MainWindow wird ein Objekt von der Klasse UsbDevice erzeugt, hierbei wird der Konstruktor aufgerufen, in welchem die Initialisierung des USB-Geräts erfolgt.
Bei der Initialsieriung des Usb-Geräts können allerdings Fehler auftreten, welche ich gerne als Infobox von MainWindow anzeigen lassen würde. Also muss ich ja irgendwie die Fehlermeldung aus dem Konstruktor (oder allgemeiner: aus einer Memberfunktion von UsbDevice) an MainWindow geben.
Hierbei dachte ich an das Signal-Slot-Konzept von Qt. UsbDevice bekommt das Signal error(QString message), MainWindow bekommt den Slot error(QString message).
Da taucht aber das Problem auf, dass ich nicht weiß, wann bzw. wo ich das connect machen muss.
Ich dachte, dass ich das connect im Konstruktor von MainWindow machen muss, also:
Code: Alles auswählen
MainWindow::MainWindow() {
pUsbDev = new UsbDevice();
connect(pUsbDev, error(), this, error());
}Würde ich die beiden Zeilen vertauschen, bekäme ich ein SegFault, weil das Objekt ja noch nicht existiert.
Ist es also die einzige Möglichkeit, die Initialisierung des Usb-Geräts aus dem UsbDevice-Konstruktor zu entfernen und dann folgendes zu machen?
Code: Alles auswählen
MainWindow::MainWindow() {
pUsbDev = new UsbDevice();
connect(pUsbDev, error(), this, error());
pUsbDev->initUsb(); // Eigentliche Geräteinitialisierung
}Danke schon mal für Eure Kommentare,
QMaddin