Bonjour, je refais temporairement mon apparition sur Qt pour un utilitaire (une moulinette dans notre jargon).
En simplifiant grossièrement, j'ai une interface qui me permet d'ouvrir plusieurs fichiers qui s'ouvriront chacun dans un nouvel onglet d'un QTabWidget.
Le titre donné à chaque onglet est issu d'une ligne particulière du fichier ouvert courant. A chaque fois que l'utilisateur fait File > open Files ... je vide le QTabWidget de ses pages.


1 - Ma méthode pour vider et remplir les onglets est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
while(tabWidgetPoFiles->count())
    {
        currentTab = tabWidgetPoFiles->widget(0);
        tabWidgetPoFiles->removeTab(0);
        delete currentTab;  // should delete all children too
    }
la version pour les remplir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
//--- create a new Tab with a layout and a QPlainTextEdit
newTab = new QWidget();                             // do not specify parent widgets
newHorizontalLayout = new QHBoxLayout(newTab);      // Layouts the entire QPlainTextEdit
newPlainTextEdit = new QPlainTextEdit(newTab);      // Will display the content of the file
newHorizontalLayout->addWidget(newPlainTextEdit);   // Layouts the widget
...
newPlainTextEdit->setPlainText(in.readAll());    // fill the plain text edit
...
=> Ma première question est : est-ce que j'ai des fuites mémoires en faisant ça ?
D'après la doc, mon onglet est un QWidget qui hérite de QObject, je suppose que newHorizontalLayout ainsi que newPlainTextEdit vont dans sa liste d'enfants et donc lors de mon delete ils sont alors supprimés aussi ?
Mais qu'en est-il du texte du QPlainTextEdit ? c'est la ma question en fait, beaucoup de widgets ont des paramètres qui sont des références constantes, est-ce pour faire une copie locale ? Dans mon cas, j'utilise setPlainText(const QString & text), si j'appelle cette fonction avec un texte créé localement, quand je sors de la fonction y'a pas un problème ?

Note : je pourrais tester en faisant quelque chose comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
QString* newString = new QString("toto");
newPlainTextEdit->setPlainText(*newString);
 
newString->append(" et tata");   // modifier newString
// comparer le text de newPlaintextEdit avec newString

2 - Pour le titre de l'onglet, la chaîne qui sert de titre est constuire d'après un bricolage sur les lignes du fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
tabWidgetPoFiles->addTab(newTab, (title.isEmpty()) ? QString() : QString(title));
Même question que tout à l'heure, label étant une référence constante dans int QTabWidget::addTab ( QWidget * page, const QString & label ), lorsque je vais quitter la fonction mon 'title' étend sa portée, qu'adviendra-t-il de 'label' ?