Hallo,
folgendes Anliegen: Ich möchte 3D-Inhalte im besagten QOpenGLWindow (Qt 5) visualisieren. Daneben existiert ein QWidget (ebenfalls Window), was quasi zur Anzeige von Statusmeldungen fungiert. Wird das Programm gestartet, soll sich das QWidget öffnen und dem Benutzer die ganze Initialisierung anzeigen. Anschließend öffnet sich das QOpenGLWindow und visualisiert die Szene. Wird das QOpenGLWindow geschlossen, so soll sich auch das QWidget schließen..bzw. das Prg. herunterfahren und beenden. Mein Problem ist, wie ich dieses Zusammenspiel umsetzte. Denn beide Elemente sind ja Toplevel-Fenster. Für jeden Hinweis schon mal im Voraus...Danke.
FR_Master
Zusammenspiel zwischen QWidget und QOpenGLWindow.
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.
Da beide von QObject abegeleitet sind, werden sie beim Zerstören auch beide das Signal destroyed() senden wenn sie zerstört wurden -> http://doc.qt.io/qt-5/qobject.html#destroyed
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.
Also sollte ich beide Fenster als unabhängige Fenster umsetzen (in keiner Hierarchie), die wiederum nur über Signal/Slot kommunizieren ?
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.
Du wolltest wissen wie man ein Fenster zerstört wenn ein anderes zerstört wird. Es hindert Dich aber auch keiner daran, das z.B. beides in einem MainWindow dargestellt wird.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.
Da QWindow kein Signal beim Schliessen anbietet, könntest Du es "von Hand" machen.
Achtung: Ich habe nicht geprüft, ob es Nebenwirkungen gibt, z.B. wenn der "close" von QOpenGLWindow verhindert wird.
Code: Alles auswählen
class TestOpenGLWindow : public QOpenGLWindow {
Q_OBJECT
public:
TestOpenGLWindow();
signals:
void testClosed();
public:
virtual bool event(QEvent*) override;
};
TestOpenGLWindow::TestOpenGLWindow(){
}
bool TestOpenGLWindow::event( QEvent* event ){
if( event->type() == QEvent::Close ){
qDebug() << "close detected";
emit testClosed();
}
return QOpenGLWindow::event( event );
}
int main(int argc, char *argv[]){
QApplication a(argc, argv);
QWidget* w = new QWidget();
w->setWindowTitle( "the widget" );
w->show();
TestOpenGLWindow* ow = new TestOpenGLWindow();
ow->setTitle( "the openglwindow" );
ow->show();
QObject::connect( ow, SIGNAL(testClosed()), w, SLOT(close()) );
return a.exec();
}
ODT Informatik GmbH, Reto Tschofenig