11
votes

Une question de débutant dans qt

QMainWindow(parent),
ui(new Ui::MainWindow)  

0 commentaires

3 Réponses :


12
votes

Ceci est en fait une question C ++. Ce que vous cherchez s'appelle Listes d'initialisation . Le qmainwindow (parent) appelle ce constructeur pour Superclass S ( qmainwindow ) et UI (nouveau UI :: MainWindow) < / code> constructions ui membre.


2 commentaires

Ceci est donc utilisé uniquement dans la fonction de construction? ou peut être utilisé dans n'importe quel type de fucnitions?


.. Mais dans toutes sortes de constructeurs, y compris Copy Constructeurs .



5
votes

Ces deux lignes sont la "liste d'initialisation" forte> et sont exécutées à la durée "Création" de chaque instance de cette classe. Chaque classe héritante doit contenir un appel au constructeur de Superclass dans cette liste.

Vous pouvez également écrire: xxx

lequel pourrait trouver mieux lisible. Mais l'utilisation d'une liste d'initialisation est légèrement plus rapide et est optimisée par le compilateur. Notez que ces listes ne peuvent être utilisées que dans les constructeurs et que vous ne pouvez appeler aucune fonction de l'objet - car il ne "vive" pas encore. Mais vous pouvez définir la valeur de certains attributs et les reportez-leur dans les instructions suivantes (pour éviter la redondance du code par exemple), comme dans l'exemple suivant: xxx

Notez que la plupart des compilateurs Donnez-vous un avertissement si l'ordre des membres de votre liste d'initialisation ne correspond pas à la commande dans la définition de la classe.


0 commentaires

9
votes

À titre d'explication plus poussée, observez que la classe générée par le compilateur d'interface utilisateur est également appelée (dans ce cas) MAINWINDOW , mais il appartient à l'espace de noms ui , de sorte que son nom complet est ui :: mainwindow . Ceci est catégoriquement non identique à la classe MAINWINDOW qui hérite de qmainwindow . Cependant, la classe qmainwindow a un pointeur de membre (appelé ui ) sur un ui :: mainwindow , qui est initialisé dans le constructeur, comme expliqué ci-dessus. Regardez le fichier ui_mainwindow.h pour voir comment toutes les pièces correspondent ensemble. Notez également que les membres de UI :: MAINWINDOW sont tous publics et donc entièrement accessibles dans MainWindow .

Un design alternatif consiste à fusionner l'identité des deux classes MAINWINDOW en utilisant plusieurs héritage, dérivant votre propre MAINWINDOW à partir des deux qmainwindow et < Code> UI :: MainWindow . Cependant, le code généré par la version actuelle de qtcreator suit le motif de composition plutôt que le motif d'héritage.


1 commentaires

+1 - Cette réponse a été un bon rappel que UI :: MainWindow est un produit du MOC et n'est pas déclaré que dans MainWindow.h - la déclaration là-bas qui ressemble à ... Espace de noms UI {Classe Mainwindow; } ... est en fait une classe de stub pour accélérer la compilation.