Seite 1 von 1
Allgemeine Frage zu QObject *parent
Verfasst: 29. September 2010 15:15
von DBGTMaster
Hallo,
immer wieder lässt sich folgendes finden:
QMessageBox ( QWidget * parent = 0 )
Und zwar geht es um das "QWidget * parent = 0", dieses lässt sich in allen möglichen Klassen finden. Nur welchen genauen Zweck hat dieses?? Ich werde wieder über google, sonst noch irgendwo fündig..
oder auch:
QTcpSocket::QTcpSocket (
QObject * parent = 0 )
Was vorallem tut der Parent beim QTcpSocket??
Danke!
Verfasst: 29. September 2010 15:31
von upsala
Q_INVOKABLE QObject::QObject ( QObject * parent = 0 )
Constructs an object with parent object parent.
The parent of an object may be viewed as the object's owner. For instance, a dialog box is the parent of the OK and Cancel buttons it contains.
The destructor of a parent object destroys all child objects.
Setting parent to 0 constructs an object with no parent. If the object is a widget, it will become a top-level window.
See also parent(), findChild(), and findChildren().
Verfasst: 29. September 2010 19:23
von padreigh
Das ist ein Weg zu sagen:
Diese Methode braucht diesen Variablentyp als Übergabeparameter ... wird keiner gegeben nimm den Defaultwert XYZ an:
Code: Alles auswählen
// .h
int addiere(int = 6, int = 7);
//.cpp
int addiere (int a, int b) { return a+b;}
Aufwrufbar dann so:
Code: Alles auswählen
std::cout << addiere() << std::endl;
std::cout << addiere(22) << std::endl;
std::cout << addiere(8,12) << std::endl;
Ausgabe:
In deinem Konkreten Beispiel wird ein Pointer auf ein parent übergeben, wenn du den nicht angiebst dann wird er als 0 angenommen ( == dieses Widget hat keinen parent):
Dieser Code:
Code: Alles auswählen
// viel code
{
QWidget w;
QMessageBox * mb1 = new QMessageBox;
QMessageBox * mb2 = new QMessageBox(0);
QMessageBox * mb3 = new QMessageBox(&w);
// noch mehr code
}
// mb3 gibts hier nicht mehr, wurde vom destruktor von w aufgeräumt da child
// mb1 und mb2 gibts immer noch
mb1->deleteLater();
mb2->deleteLater();
resultiert in 3 MessageBoxen, zwei ohne parent und eine mit.
Wird w zerstört geht mb3 mit übern Jordan, mb1 und 2 nicht ....
Verfasst: 30. September 2010 13:45
von DBGTMaster
padreigh hat geschrieben:Das ist ein Weg zu sagen:
Diese Methode braucht diesen Variablentyp als Übergabeparameter ... wird keiner gegeben nimm den Defaultwert XYZ an:
Code: Alles auswählen
// .h
int addiere(int = 6, int = 7);
//.cpp
int addiere (int a, int b) { return a+b;}
Aufwrufbar dann so:
Code: Alles auswählen
std::cout << addiere() << std::endl;
std::cout << addiere(22) << std::endl;
std::cout << addiere(8,12) << std::endl;
Ausgabe:
In deinem Konkreten Beispiel wird ein Pointer auf ein parent übergeben, wenn du den nicht angiebst dann wird er als 0 angenommen ( == dieses Widget hat keinen parent):
Dieser Code:
Code: Alles auswählen
// viel code
{
QWidget w;
QMessageBox * mb1 = new QMessageBox;
QMessageBox * mb2 = new QMessageBox(0);
QMessageBox * mb3 = new QMessageBox(&w);
// noch mehr code
}
// mb3 gibts hier nicht mehr, wurde vom destruktor von w aufgeräumt da child
// mb1 und mb2 gibts immer noch
mb1->deleteLater();
mb2->deleteLater();
resultiert in 3 MessageBoxen, zwei ohne parent und eine mit.
Wird w zerstört geht mb3 mit übern Jordan, mb1 und 2 nicht ....
Hallo,
super vielen dank für deine tolle Antwort. Die C++ Bedeutung selber war mir eh klar, nur nicht, was Qt genau damit macht..
Aber danke, jetzt kenn ich mich aus

..
Lg
Verfasst: 30. September 2010 17:20
von Christian81
Und was soll der sinnlose Fullquote ??