3 Réponses :
Ceci est en fait une question C ++. Ce que vous cherchez s'appelle Listes d'initialisation . Le qmainwindow (parent) code> appelle ce constructeur pour Superclass code> S ( qmainwindow code>) et UI (nouveau UI :: MainWindow) < / code> constructions ui code> membre. p>
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 i>.
Ces deux lignes sont la "liste d'initialisation" forte> 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: p> 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: p> 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. p> p>
À 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) Un design alternatif consiste à fusionner l'identité des deux classes code> MAINWINDOW CODE> en utilisant plusieurs héritage, dérivant votre propre MAINWINDOW CODE>, mais il appartient à l'espace de noms ui code> , de sorte que son nom complet est ui :: mainwindow code>. Ceci est catégoriquement non identique à la classe code> MAINWINDOW CODE> qui hérite de qmainwindow code>. Cependant, la classe qmainwindow code> a un pointeur de membre (appelé ui code>) sur un ui :: mainwindow code>, qui est initialisé dans le constructeur, comme expliqué ci-dessus. Regardez le fichier ui_mainwindow.h code> pour voir comment toutes les pièces correspondent ensemble. Notez également que les membres de UI :: MAINWINDOW CODE> sont tous publics et donc entièrement accessibles dans MainWindow Code>. p>
MAINWINDOW CODE> à partir des deux qmainwindow code> et < Code> UI :: MainWindow Code>. Cependant, le code généré par la version actuelle de qtcreator em> suit le motif de composition plutôt que le motif d'héritage. P>
+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.