Dann musst du dir eben Erfahrung selber erarbeiten
Und am besten ordentliche C++-Bücher lesen.
Dann kämst du auf die Idee, bestimmte Buttons zu gruppieren in einem parent widget. Dann musst du nur das parent hide()en, und die children tun es auch. Wenn diese Buttons eine bestimmte bemeinsame Funktion haben (irgend was im SPiel kontrollieren), hast du einen Grund für ein eigenes QWidget-Derivat.
Ist dir jetzt wenigstens klar, was passiert ist? Speziell "was geschah mit SpielWIdget Bla"?
Funktionsaufruf - Probleme
-
- Beiträge: 22
- Registriert: 12. Februar 2011 09:52
also das mit der laufzeit hab ich schon geklärt. das hatt ich ja vorher anderst iwie muss das gelöscht worden sein von mir oder meinem kumpel. Ich hab bei createSpielWidget die button = new QPushBUtton wieder drinne und so aber das mit dem auf lebtwohl button klicken das dann das SpielWidget erstellt wird klappt nicht. sollte ja eigentlich gehen
Bei anderen funktion z.B auf inventar klicken und dann da auf spiel wird das SpielWidget auch erstellt. Nur in der questDatenbank.cpp gehts nicht(auch in anderen dateien nicht) und dies wär ja nun mein herkömmliches problem. also wenn wer die lösung weis wär ich nett wenn ich die erfahren dürft leider hab ich mein aufrufen der funktion nichts rausgefunden was falsch sein sollte vl habt ihr gemeint wegen den haufen bla = new QPushButton usw die gefehlt haben.
hoffe könnt mir helfen thx
Bei anderen funktion z.B auf inventar klicken und dann da auf spiel wird das SpielWidget auch erstellt. Nur in der questDatenbank.cpp gehts nicht(auch in anderen dateien nicht) und dies wär ja nun mein herkömmliches problem. also wenn wer die lösung weis wär ich nett wenn ich die erfahren dürft leider hab ich mein aufrufen der funktion nichts rausgefunden was falsch sein sollte vl habt ihr gemeint wegen den haufen bla = new QPushButton usw die gefehlt haben.
hoffe könnt mir helfen thx
Das sind ziemliche Grundlagen. Es gibt in C++ den automatischen und den dynamischen Speicherbereich (grob).
Beim dynamischen muss sich der Programmierer ums Anlegen und zerstören (vor allem letzteres) selber kümmern (new/delete).
Beim automatischen musst du dich NICHT drum kümmern. Verlässt ein Objekt den Gültigkeitsbereich, dann wars das!
Dein "Bla" ist so ein "automatisches Objekt". Verlässt es den Gültigkeitsbereich (hier Ende der FUnktion) geht das Hops, es wird zerstört.
Wenn dir nicht klar ist was ich mein, experimentier ein wenig rum.
Einfach ne Testklasse, die im Konstruktor und Destruktor eine Meldung ausgibt. Dann Machst du ein paar (verschachtelte) Scopes auf, legst objekte an, gibts debug-Meldungen aus, zerstörst - je nach deinem Gusto.
Diesen Spaß sollte jeder mal selber durchgezogen haben, dann versteht man auch besser was passiert.
Beim dynamischen muss sich der Programmierer ums Anlegen und zerstören (vor allem letzteres) selber kümmern (new/delete).
Beim automatischen musst du dich NICHT drum kümmern. Verlässt ein Objekt den Gültigkeitsbereich, dann wars das!
Dein "Bla" ist so ein "automatisches Objekt". Verlässt es den Gültigkeitsbereich (hier Ende der FUnktion) geht das Hops, es wird zerstört.
Wenn dir nicht klar ist was ich mein, experimentier ein wenig rum.
Einfach ne Testklasse, die im Konstruktor und Destruktor eine Meldung ausgibt. Dann Machst du ein paar (verschachtelte) Scopes auf, legst objekte an, gibts debug-Meldungen aus, zerstörst - je nach deinem Gusto.
Diesen Spaß sollte jeder mal selber durchgezogen haben, dann versteht man auch besser was passiert.
-
- Beiträge: 22
- Registriert: 12. Februar 2011 09:52
Nur damit ichs richtig versteh: Du meinst die Funktion?^^ hab nämlich ein
desshalb bissel verwirrt
mfg
Code: Alles auswählen
SpielWidget Bla;
Bla.createSpielWidget();
mfg
Zuletzt geändert von JeromeBaur am 18. März 2011 14:43, insgesamt 1-mal geändert.
-
- Beiträge: 22
- Registriert: 12. Februar 2011 09:52
Was soll ich denn noch groß Beispiele bringen?
Lösung? Sorg dafür dass Bla den Scope überlebt -> dynamische (="new" aka "Heap") statt automatische (aka "Stack") Speicherverwaltung. Incl. Vorsicht vor Speicherlecks (passende deletes zum new).
Wenn das immer noch nichts bringt solltest du wirklich den Schritt zurück in Richtung C++-Grundlagen machen. Klingt hart, ist aber so, sry
Code: Alles auswählen
void QuestDatenbank::createSpielWidgetQuest()
{
SpielWidget Bla;
Bla.createSpielWidget();
} // hier ist Bla tot!
// bei einem Aufruf:
QuestDatenbank db;
db.createSpielWidget();
// ist hier schon von dem Bla aus obigem Funktionsaufruf nichts mehr übrig
Wenn das immer noch nichts bringt solltest du wirklich den Schritt zurück in Richtung C++-Grundlagen machen. Klingt hart, ist aber so, sry