Widget als extra Fenster anzeigen lassen
Widget als extra Fenster anzeigen lassen
Hallo,
ich hab folgendes Problem, immer wenn ich ein Widget als extra Fenster mit der Funktion "show()" anzeigen lassen möchte öffnet es sich zwar kurz schließt sich jedoch sofort automatisch wieder. Woran kann dies liegen ?
ich hab folgendes Problem, immer wenn ich ein Widget als extra Fenster mit der Funktion "show()" anzeigen lassen möchte öffnet es sich zwar kurz schließt sich jedoch sofort automatisch wieder. Woran kann dies liegen ?
Code: Alles auswählen
/* mainWindow.cpp */
#include "addMovie.h"
[...]
void MainWindow::addMovieWindow()
{
AddMovie add;
add.show();
}
Code: Alles auswählen
/* addMovie.h */
#ifndef ADDMOVIE_H_
#define ADDMOVIE_H_
#include "ui_AddMovie.h"
class AddMovie : public QWidget
{
Q_OBJECT
public:
AddMovie();
private:
Ui::AddMovie ui;
};
#endif /*ADDMOVIE_H_*/
Code: Alles auswählen
/* addMovie.cpp */
#include "addMovie.h"
AddMovie::AddMovie()
{
ui.setupUi(this);
}
Nein ich leg es nicht auf dem Stack an.
Code: Alles auswählen
AddMovie add;
add.show();
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ich würde es einfach mal mit dem Qt-Tutorial probieren
Könnte ggf. funktionieren
Code: Alles auswählen
void MainWindow::addMovieWindow()
{
AddMovie *add = new AddMovie (this);
add->show();
}
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Hier passiert gar nichts...Christian81 hat geschrieben:Ich würde es einfach mal mit dem Qt-Tutorial probieren
Könnte ggf. funktionierenCode: Alles auswählen
void MainWindow::addMovieWindow() { AddMovie *add = new AddMovie (this); add->show(); }
Code: Alles auswählen
void MainWindow::addMovieWindow()
{
AddMovie *add = new AddMovie (0);
add->show();
}
Hallo,
meiner bescheidenen Meinung nach liegt das Problem darin begründet, dass AddMovie lokal deklariert ist und sich die "Lebensdauer" des Fensters daher auf die Dauer der Methode addMovieWindow() beschränkt. Da show() das Fenster anzeigt, ohne dabei den Programmablauf zu unterbrechen, wird das Fenster gleich nach dem Anzeigen "wegen Funktionsende" wieder zerstört.
QDialog und exec() haben funktioniert, weil exec() die weitere Programmausführung bis zum Schließen des Fensters blockt.
Gruß Michael
meiner bescheidenen Meinung nach liegt das Problem darin begründet, dass AddMovie lokal deklariert ist und sich die "Lebensdauer" des Fensters daher auf die Dauer der Methode addMovieWindow() beschränkt. Da show() das Fenster anzeigt, ohne dabei den Programmablauf zu unterbrechen, wird das Fenster gleich nach dem Anzeigen "wegen Funktionsende" wieder zerstört.
QDialog und exec() haben funktioniert, weil exec() die weitere Programmausführung bis zum Schließen des Fensters blockt.
Gruß Michael
Hallo
Bin der gleichen Meinung wie MichaelS, probier mal folgendes aus:
Definiere den Zeiger auf dein Widget schon in MainWindow.h (oder wie auch immer deine Hauptfenster- oder Hauptdialogklasse heißt):
In der Funktion, die das Widget aufruft, weist du dann nur noch dem schon exisitierenden Zeiger Speicher zu und rufst dann show() auf:
Soweit ich weiß sorgt Qt sonst automatisch dafür, dass wenn der auf dem Stack abgelegte Zeiger auf dein AddMovie-Widget zerstört wird, auch der Speicher gelöscht wird (d.h. das Widget verschwindet).
mfg
Bin der gleichen Meinung wie MichaelS, probier mal folgendes aus:
Definiere den Zeiger auf dein Widget schon in MainWindow.h (oder wie auch immer deine Hauptfenster- oder Hauptdialogklasse heißt):
Code: Alles auswählen
classs MainWindow : public QMainWindow
{
...
void aufrufendeFunktion();
private:
...
QWidget * addMovie;
..}
Code: Alles auswählen
void MainWindow::aufrufendeFunktion()
{
addMovie = new AddMovie(this);
addMovie->show();
}
mfg
Gesegnet sein all die, die nichts zu sagen haben
und trotzdem den Mund halten.
und trotzdem den Mund halten.