Mit einem Fenster ein zweites aufrufen
-
- Beiträge: 19
- Registriert: 28. April 2008 18:26
- Wohnort: Milkyway
Mit einem Fenster ein zweites aufrufen
Ich versuche mit folgenden 5 Dateien das was im Subject steht:
Ich vermute mein Fehler liegt in mainwindow.cpp, bei der Funktion MyWidget::TuWas()
aber wie sähe es korrekt aus?
any Hints?
tia Klaus
Ich vermute mein Fehler liegt in mainwindow.cpp, bei der Funktion MyWidget::TuWas()
aber wie sähe es korrekt aus?
any Hints?
tia Klaus
Re: Mit einem Fenster ein zweites aufrufen
Sorry, aber die Datei ist nicht zu öffnen. Du kannst die Dateien hochladen, oder zu einer Seite verlinken, wo du sie hochgeladen hast. Am besten tust du einfach den relevanten Code-Abschnitt posten...Klaus Reinke hat geschrieben:Ich versuche mit folgenden 5 Dateien das was im Subject steht:
Gruß, Hakaishi
Re: Mit einem Fenster ein zweites aufrufen
Deine Variable w2 der Klasse My2_Widget ist nur lokal, nach dem verlassen der Funktion wird das Fenster vernichtet.
Du musst es so machen dass es nach verlassen der Funktion immer noch existiert:
vl. als Membervariable des anderen Fensters oder per new, dann jedoch drauf achten dass es auch wieder richtig freigegeben wird.
Mfg veeman
Du musst es so machen dass es nach verlassen der Funktion immer noch existiert:
vl. als Membervariable des anderen Fensters oder per new, dann jedoch drauf achten dass es auch wieder richtig freigegeben wird.
Mfg veeman
Re: Mit einem Fenster ein zweites aufrufen
Sorry, ich hätte die Datei einfach speichern sollen... mein Browser ist anscheinend zu blöd .txt Dateien mit dem richtigen Programm zu öffnen.
Meinem Vorredner kann ich nur zustimmen. Eine andere Methode wäre noch der QPointer, falls du möchtest, dass das Fenster nicht x-mal beim klicken des Buttons geöffnet wird.
Viele Grüße, Hakaishi
Edit: Hier ein Beispiel mit new
Meinem Vorredner kann ich nur zustimmen. Eine andere Methode wäre noch der QPointer, falls du möchtest, dass das Fenster nicht x-mal beim klicken des Buttons geöffnet wird.
Viele Grüße, Hakaishi
Edit: Hier ein Beispiel mit new
- Dateianhänge
-
- forum00.txt
- (1.88 KiB) 421-mal heruntergeladen
Re: Mit einem Fenster ein zweites aufrufen
Zuerst: schön dass du deinen Code postest!
ABER: Wenn du mehrere Dateien hast, ist es für und das einfachste, wenn die in einem .zip stecken, da entfällt mühseliges rumkopieren und abspeichern - eingach zip entpacken und loskompilieren.
Hier war der Fehler sofort klar, aber wenns mal etwas mehr Code ist -> als ZIP zur Verfügung stellen.
Dafüt BITTE keinen externen File-Hoster nehmen, sondern die Forenfunktion "Dateianhang hochladen" verwenden!
ABER: Wenn du mehrere Dateien hast, ist es für und das einfachste, wenn die in einem .zip stecken, da entfällt mühseliges rumkopieren und abspeichern - eingach zip entpacken und loskompilieren.
Hier war der Fehler sofort klar, aber wenns mal etwas mehr Code ist -> als ZIP zur Verfügung stellen.
Dafüt BITTE keinen externen File-Hoster nehmen, sondern die Forenfunktion "Dateianhang hochladen" verwenden!
-
- Beiträge: 19
- Registriert: 28. April 2008 18:26
- Wohnort: Milkyway
Re: Mit einem Fenster ein zweites aufrufen
Besten Dank an die Tipps, werde mich erst gegen Abend damit näher beschäftigen können,
da ich mich nur als Amateur mit Qt beschäftige.
Eine Frage noch an Franz, geht auch 'tgz' ?
mfg Klaus
da ich mich nur als Amateur mit Qt beschäftige.
Eine Frage noch an Franz, geht auch 'tgz' ?
mfg Klaus
Re: Mit einem Fenster ein zweites aufrufen
Probiers doch aus früher ging .tar.bz2 z.B. nicht, mittlerweile AFAIK schon.
Und kleiner Nachtrag: schau dass keine Binaries drin sind, also nur Code, .pro und evtl. notwendige resources.
Und kleiner Nachtrag: schau dass keine Binaries drin sind, also nur Code, .pro und evtl. notwendige resources.
-
- Beiträge: 19
- Registriert: 28. April 2008 18:26
- Wohnort: Milkyway
Re: Mit einem Fenster ein zweites aufrufen
Ähem hier war der Fehler sofort klar
nun leuchtet mir schon ein, dass das Fenster gleich wieder entfernt wird beim Verlassen der Funktion
'TuWas()' aber was ändert das wenn ich 'new' verwende? (Mal abgesehen von den neuen Fehlermeldungen) tia Klaus
nun leuchtet mir schon ein, dass das Fenster gleich wieder entfernt wird beim Verlassen der Funktion
'TuWas()' aber was ändert das wenn ich 'new' verwende? (Mal abgesehen von den neuen Fehlermeldungen) tia Klaus
Re: Mit einem Fenster ein zweites aufrufen
Wenn du new verwendest dann musst du das auch einer Pointervariable zuweissen, wie zb im Konstruktor:
->
Jedoch wird bei beidem so wie du es hasst die Objekte nicht freigegeben, dh. jedes mal wenn du auf deine Schaltfläche klickst wird ein neues Fenster erstellt und Speicher reserviert.
Bei extremen Situationen erstellst du mehrere Objekte mit new bis dir irgendwann dass Betriebssystem nein sagt bei der Speicheranfrage und dein Programm zwangshaft beendet werden muss.
Schau dir nochmal genau das Beispiel von hakaishi an, auch das delete. Allgemein schau dir an was Pointer sind und welchen zussamenhang new und delte da spielt.
//Edit:
Wenn du das Fenster per new auf dem Heap erstellst wird nur die Pointervariable nach verlassen der Funktion entfernt, nicht aber das Objekt auf welches diese zeigt.
Deswegen brauchst du die Variable so oder so noch irgendwo um das erstellte Objekt weiterhin verwalten zu können.
Mfg veeman
Code: Alles auswählen
QVBoxLayout *layout = new QVBoxLayout; // wird niemals freigegeben
Code: Alles auswählen
My2_Widget *w2 = new My2_Widget;
Bei extremen Situationen erstellst du mehrere Objekte mit new bis dir irgendwann dass Betriebssystem nein sagt bei der Speicheranfrage und dein Programm zwangshaft beendet werden muss.
Schau dir nochmal genau das Beispiel von hakaishi an, auch das delete. Allgemein schau dir an was Pointer sind und welchen zussamenhang new und delte da spielt.
//Edit:
Wenn du das Fenster per new auf dem Heap erstellst wird nur die Pointervariable nach verlassen der Funktion entfernt, nicht aber das Objekt auf welches diese zeigt.
Deswegen brauchst du die Variable so oder so noch irgendwo um das erstellte Objekt weiterhin verwalten zu können.
Mfg veeman
Re: Mit einem Fenster ein zweites aufrufen
Du bekommst das Fenster gelöscht, wenn du das Attribut WA_DeleteOnClose setzt.
-
- Beiträge: 19
- Registriert: 28. April 2008 18:26
- Wohnort: Milkyway
Re: Mit einem Fenster ein zweites aufrufen
Sorry wenn ich dumme Fragen stelle, aber, was genau ist mit "freigeben" gemeint?
tia Klaus
tia Klaus
-
- Beiträge: 19
- Registriert: 28. April 2008 18:26
- Wohnort: Milkyway
Re: Mit einem Fenster ein zweites aufrufen
Aaarg in 'TuWas()' hatte ich ein Sternchen vergessen:
also statt:
My2_Widget w2 = new My2_Widget;
My2_Widget *w2 = new My2_Widget;
was die Fehlermeldung auf folgendes reduziert;
mainwindow.cpp: In destructor ‘virtual MyWidget::~MyWidget()’:
mainwindow.cpp:19: error: ‘w2’ was not declared in this scope
make: *** [mainwindow.o] Fehler 1
mfg Klaus
also statt:
My2_Widget w2 = new My2_Widget;
My2_Widget *w2 = new My2_Widget;
was die Fehlermeldung auf folgendes reduziert;
mainwindow.cpp: In destructor ‘virtual MyWidget::~MyWidget()’:
mainwindow.cpp:19: error: ‘w2’ was not declared in this scope
make: *** [mainwindow.o] Fehler 1
mfg Klaus
Re: Mit einem Fenster ein zweites aufrufen
In ~MyWidget() gibts kein w2.
MyWidget hat keinen Member w2.
In den Namensräumen, in denen MyWidget eingebettet ist, gibt es kein w2.
Einzig ein lokales w2 gibt es in TuWas(), auf das du nach Verlassen von TuWas() keinen Zugriff mehr hast.
MyWidget hat keinen Member w2.
In den Namensräumen, in denen MyWidget eingebettet ist, gibt es kein w2.
Einzig ein lokales w2 gibt es in TuWas(), auf das du nach Verlassen von TuWas() keinen Zugriff mehr hast.
Re: Mit einem Fenster ein zweites aufrufen
Mehrere Fenster lassen sich so ganz einfach erstellen:
1. Rechtsklick auf Formulardateien im QT Creator - Hinzufügen - Qt - Designer-Formular.
2. Beide Fenster lassen sich (z.B. mit Klicken auf einen Button so verbinden):
Vielleicht hilft dieses Beispiel ja weiter.
1. Rechtsklick auf Formulardateien im QT Creator - Hinzufügen - Qt - Designer-Formular.
2. Beide Fenster lassen sich (z.B. mit Klicken auf einen Button so verbinden):
Code: Alles auswählen
// mainDlg.cpp
#include <maindlg.h>
#include <ui_maindlg.h>
#include <anotherdlg.h>
//[...]
QObject::connect(ui->anotherDlgButton, SIGNAL(clicked()), this, SLOT(showAnotherDlg()));
//[...]
void mainDlg::showAnotherDlg()
{
anotherDlg *anotherDlgDlg = new anotherDlg();
anotherDlg->exec(); // for modal or show() for non-modal dialog
}