Il y a une autre question sur Stackoverflow à ce sujet mais je ne trouve pas la solution acceptée possible. Je pose donc à nouveau la question parce que la vieille question est hors de propos.
La situation est ainsi. J'ai des écrans d'application définis par 'main.qml', 'feature1.qml', 'feature2.qml'.
Ces écrans partagent la même barre d'outils sous la barre de titre. La barre d'outils a plusieurs éléments, donc copier-coller le code QML est comme un fou. Cette question: le fichier QML inclut - ou un fichier monolithique (structure du code QML)? dit qu'il est possible d'utiliser simplement le nom de fichier QML comme nom de composant mais je ne peux pas le faire fonctionner.
Toute solution? avec des détails pls.
Supposons que vous ayez un fichier appelé main.qml
et un composant dans un autre fichier appelé MyCustomText.qml
. Si les deux fichiers sont dans le même répertoire, vous pouvez directement charger le composant comme ceci:
// in Main.qml
Rectangle {
id: root
MyCustomText {
text: "This is my custom text element"
}
}
Si MyCustomText.qml
est dans un autre sous-répertoire MyComponents
par exemple pour regrouper tous vos composants personnalisés, vous devez d'abord import
le répertoire avant d'utiliser le composant de la même manière:
// in Main.qml
import "MyComponents"
Rectangle {
id: root
MyCustomText {
text: "This is my custom text element"
}
}
Une autre chose importante à noter est que vos fichiers QML
doivent toujours commencer par une lettre majuscule si vous voulez pouvoir les utiliser de cette façon
Bien sûr, votre solution Loader
fonctionne aussi mais c'est le moyen le plus simple d'importer des fichiers QML dans d'autres composants.
Enfin, je l'ai creusé sur Internet. Disons que le fichier à inclure est 'mycomponent.qml' dans cette structure de répertoires (Qt Quick):
projectdir/
qml/
projectname/
main.qml
mycomponent.qml
Le contenu de 'mycomponent.qml' (par exemple):
Text {
text:"Hello, Scooby Doo!";
}
Nous devons le charger de cette façon (dans 'main.qml'):
Rectangle {
...
Loader {
source:"mycomponent.qml";
}
...
}
Voir la documentation Qt sur les composants réutilisables.
Le fichier QML importé définit un type dont le nom est le même que le nom de fichier (en majuscule, moins le suffixe .qml). QML appelle le type un composant réutilisable. Vous utilisez ce nom de type pour instancier un objet dans le document QML importateur (fichier.)
Ce n'est pas comme un langage C, où le texte du fichier inclus est inséré dans le fichier inclus. C'est plus comme importer le nom d'une classe en Python, puis instancier un objet de cette classe dans le fichier d'importation. Ou quelque peu similaire à Javascript, le fichier importé crée un objet prototype et le fichier importateur en hérite de manière prototypique. Sauf notez la discussion sur l'objet racine et quelles propriétés du composant seront visibles (en raison de la portée du document QML.) Vous ne pourrez pas accéder à tout dans le fichier importé comme s'il s'agissait d'un C include, d'un Python import, ou un héritage JS.
Vous pouvez simplement appeler le nom du qml. par ex. J'ai 2 fichiers qml. Les fichiers main.qml et Merchant.qml
Je viens d'appeler le marchand. il faut le montrer dans intellisense.
ApplicationWindow {
id: mainWindow
visible: true
Component{
id: merchantsComponent
Merchant{
id: merchants
width: mainWindow.width
height: mainWindow.height
}
}
}
Vous pouvez simplement appeler ce composant vers Loader