Allgemeine Frage zu QObject *parent

Alles rund um die Programmierung mit Qt
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Allgemeine Frage zu QObject *parent

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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().
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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:

Code: Alles auswählen

13
29
20
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 ....
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Beitrag 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:

Code: Alles auswählen

13
29
20
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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und was soll der sinnlose Fullquote ??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten