Seite 1 von 1

[solved] Fenster X nicht darstellen

Verfasst: 5. April 2008 14:51
von macpret
Hallo,

Ich habe eine kleine Anwendung mit 3 Fenstern programmiert.
Einem MainWindow, einem QDialog und einem QWidget.

Nun suche ich die Möglichkeit das Schließen der Fenster durch drücken von X (oben rechts) zu verhindern/unterbinden.

Ist dies möglich? - Wenn ja wie? - In den Eigenschaften im Designer habe ich leider nichts gefunden.

Gruß
mac

Verfasst: 5. April 2008 18:33
von PeterLustig
Du musst closeEvent reimplementieren.

Verfasst: 5. April 2008 19:23
von macpret
Gibt es keine andere/einfachere Möglichkeit?

Wenn nicht:
Wie mache ich dies denn?
Wie reimplementiere ich das closeEvent?

Also es wäre für mich halt auch ok, wenn ich die Aktionen die ausgeführt werden, wenn ich dieses X drücke verändern kann. Dazu müsste ich allerdings wissen, wo das closeEvent implementiert ist.

Ich danke bis hierher :-)

Verfasst: 5. April 2008 19:26
von PeterLustig
Das sind C++ basics.

Du musst eine neue Klasse erstellen die von QWidget (oder QMainWindow, je nachdem was du benutzt) ableitet. Dann erstellst du eine Funktion namens "closeEvent" mit dem ursprünglichen Parametern und Wiedergabewert.

Verfasst: 5. April 2008 19:36
von macpret
Ich habe ja auch nicht gesagt, dass ich gut c++ programmieren kann. Ich versuche es halt gerade zu lernen, habe aber leider gleichzeitig bereits ein Projekt für mein Studium in c++ zu erledigen - Daher meine Missere :-/

Also mit ableiten meinst du erben?
Sprich bei c++ mit dem ":"
also: class NeueKlasse : private/public AlteKlasse

und dort kann ich dann direkt die Funktion closeEvent erstellen und dort das hineinschreiben, was bei dem Event passieren soll?

Verfasst: 5. April 2008 19:55
von macpret
Also ich habe nun so gemacht:

in der h-Datei:

Code: Alles auswählen

class DriveWindow: public QDialog, protected Ui_DriveWindow
{
	friend class MainWindow;
	Q_OBJECT
	public:
	DriveWindow(QWidget* parent = 0, int Language = 1);

	virtual ~DriveWindow();
	void closeEvent(QCloseEvent *);
};
und in der cpp-Datei habe ich folgendes hinzugefügt:

Code: Alles auswählen

DriveWindow::closeEvent(QCloseEvent *)
{
	//Hier erstmals nix tun
}
Wie du wahrscheinlich direkt sehen wirst ist es so falsch. Kannst du mir hierbei kurz unter die Arme helfen?

Danke

Verfasst: 5. April 2008 20:14
von macpret
Danke für die Wartezeit. Mit ein wenig Anstrengung ist es ja durchaus zu schaffen :-)

Lösung:

Die cpp-Datei musste noch korrigiert werden:

Code: Alles auswählen

void DriveWindow::closeEvent(QCloseEvent *test)
{
	cout << "DAS PROGRAMM WIRD BEENDET!!!";
	DriveWindow::ChangeModSlot();
}
Wenn ich nun diesen ChangeModSlot nicht ausführe wird das Programm ganz normal beendet, wenn es ausgeführt wird, dann wechselt er wieder ganz normal den Modus, so wie es erwünscht ist.

Vielen Dank :-)

Verfasst: 5. April 2008 20:15
von PeterLustig
1) Du solltest wirklich erst einmal C++ lernen bevor du mit einem Framework wie Qt rumhantierst. Zumindest die Grundkenntnisse solltest du haben..
2) Du kannst dein Posting editieren, Doppelpost ist nicht nowendig. ;)
3) Ich versteh nich was das Friendly MainWindow dort soll.. Deine Klasse leitet von QDialog ab, welche wiederrum von QWidget ableitet in welcher die benötigte closeEvent Funktion vorhanden ist.
4) Hast du dir auch nur einmal die Dokumentation zu closeEvent angesehen? Dort ist eigentlich ganz eindeutig wie man das schließen verhindern kann..