Zusammenspiel zwischen QWidget und QOpenGLWindow.

Alles rund um die Programmierung mit Qt
Antworten
FR_Master
Beiträge: 3
Registriert: 17. August 2017 15:18

Zusammenspiel zwischen QWidget und QOpenGLWindow.

Beitrag von FR_Master »

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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.

Beitrag von Christian81 »

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
FR_Master
Beiträge: 3
Registriert: 17. August 2017 15:18

Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.

Beitrag von FR_Master »

Also sollte ich beide Fenster als unabhängige Fenster umsetzen (in keiner Hierarchie), die wiederum nur über Signal/Slot kommunizieren ?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.

Beitrag von Christian81 »

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
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Zusammenspiel zwischen QWidget und QOpenGLWindow.

Beitrag von odt »

Da QWindow kein Signal beim Schliessen anbietet, könntest Du es "von Hand" machen.

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();
}
Achtung: Ich habe nicht geprüft, ob es Nebenwirkungen gibt, z.B. wenn der "close" von QOpenGLWindow verhindert wird.
ODT Informatik GmbH, Reto Tschofenig
Antworten