2016-05-09 8 views
0

Ich habe zwei Windows in meinem QT-Projekt. MainWindow und Load. Ich möchte einige Felder in MainWindow aktualisieren, wenn Load geschlossen ist. Ich habe schon einige Dinge ausprobiert. Ich habe auch eine Funktion namens update_channel(), die alle notwendigen Dinge tut. Fürs Erste verwende ich eine PushButton, um die Änderungen manuell vorzunehmen. Das funktioniert gut, aber ich brauche diese Funktion, um automatisch aufgerufen zu werden, wenn das Ladefenster geschlossen wird. Zum Beispiel habe ich versucht:Qt5 Update MainWindow von Kind Fenster

connect(load, SIGNAL(load->close()), this, SLOT(update_channel())); 

und

connect(load, &Load::update_mainwindow(), ui->pb_update, &QPushButton::click); 
(with a public signal in "load.h" and emit update_mainwindow in "load.cpp") 

Ich bin aus Ideen und ich bin an dem Punkt, wo ich nicht mehr wissen, was googeln, keiner der Tipps finde ich Werke in mein Fall.

Ich bin mit Qt Creator 3.6.0 (für Qt 5.5.1)

+0

Ihre Fenster sind 'QWindow's oder' QWidget's? – ixSci

+0

MainWindow ist QMainWindow, Laden ist QDialog – Wimmal

Antwort

0

Subclass die QDialog Klasse und ein Signal hinzufügen, um sie close nennen, zum Beispiel. Überschreibe dann die closeEvent Elementfunktion und gib dein close Signal von dort aus. Stellen Sie außerdem sicher, dass Ihre update_channel()-Funktion ein Steckplatz ist. Dann verbinden Sie das close Signal mit dem update_channel Steckplatz und Sie sind fertig.

Eine andere Möglichkeit besteht darin, eines der vorhandenen Signale QDialog zu verwenden: accepted oder rejected. Sie sind nicht exakt äquivalent zu der besagten Lösung, sollten aber auch akzeptabel sein, da ein Dialog normalerweise entweder akzeptiert oder abgelehnt wird.

+0

Zunächst einmal, vielen Dank für die schnelle Antwort. Nur eine Frage: Wo sollte ich QDialog ableiten? In MainWindow oder Laden? – Wimmal

+0

@Wimmal, da Ihre Ladung ein "QDialog" -Objekt ist, dann ist es "Load", das ein Objekt der Unterklasse werden sollte – ixSci

+0

Danke! Ich werde es versuchen und dich wissen lassen. – Wimmal

0

Ich habe es selbst gelöst. Das Problem war nicht die Definition der connect-Anweisung. Das Problem war die Zeile in meinem Code, in die ich diesen Code stecke.

Ich habe die "connect" direkt am Anfang meines Codes, wo kein "Laden" -Fenster vorhanden war. Also habe ich es geändert in:

load = new Load(this); 
connect(load, SIGNAL(update_mainwindow()), this, SLOT(update_channel())); 
load->show(); 

Jetzt funktioniert es wie erwartet!