Bonjour les amis !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
#include <qlcdnumber.h>
#include <qslider.h>
 
#include "mywidget.h"
 
MyWidget::MyWidget( QWidget *parent, char *name ) : QVBox( parent, name )
{
  QLCDNumber *lcd = new QLCDNumber( this );
  QSlider *s = new QSlider( QSlider::Horizontal, this );
 
  connect( s, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
}
La plupart des programmeurs de C++ réagiront à ce code, nous faisons un new, mais aucun delete. Il est fait par la classe de base de laquelle nos widgets sont dérivés. Mais je ne comprends pas, comment ? Je pense pas que MFC de Visual C++ ne permet pas de faire ça, donc c'est une spécificité de Qt ?
QMyObject est ici une classe héritant QObject, pourquoi mon code provoque une fuite de mémoire tandis que mon second n'en fait pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main( int argc, char **argv )
{
  // Create an application
  QApplication a( argc, argv );
 
  // Create instances
  QMyObject top( 0, "top" );
  QMyObject *x = new QMyObject( &top, "x" );
  QMyObject *y = new QMyObject( &top, "y" );
  QMyObject *z = new QMyObject( x, "z" );
 
  // Do stuff to stop the optimizer
  top.doStuff();
  x->doStuff();
  y->doStuff();
  z->doStuff();
 
  return 0;
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main( int argc, char **argv )
{
  // Create an application
  QApplication a( argc, argv );
 
  // Create instances
  QMyObject top( 0, "top" );
  QMyObject *x = new QMyObject( 0, "x" );
  QMyObject *y = new QMyObject( 0, "y" );
  QMyObject *z = new QMyObject( x, "z" );
 
  // Do stuff to stop the optimizer
  top.doStuff();
  x->doStuff();
  y->doStuff();
  z->doStuff();
 
  return 0;
}