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 :
la version pour les remplir :
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 }
=> Ma première question est : est-ce que j'ai des fuites mémoires en faisant ça ?
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 ...
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
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' ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tabWidgetPoFiles->addTab(newTab, (title.isEmpty()) ? QString() : QString(title));
Partager