Outils pour utilisateurs

Outils du site


fr:actionaz_qtscript

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
fr:actionaz_qtscript [2014/10/06 22:39] – [Les widgets spécifiques pour créer une fenêtre] violettefr:actionaz_qtscript [2025/05/07 16:33] (Version actuelle) potdemiel
Ligne 89: Ligne 89:
 == Les communes == == Les communes ==
  
-Ceci n'est pas une liste exhaustive, je vous renvoie ici pour avoir la liste détaillé.+Ceci n'est pas une liste exhaustive, je vous renvoie [[http://qt.developpez.com/doc/4.7/qwidget||ici]] pour avoir la liste détaillé.
  
   * **cursor** : Propriété qui permet de choisir le curseur qui doit s'afficher.   * **cursor** : Propriété qui permet de choisir le curseur qui doit s'afficher.
Ligne 133: Ligne 133:
 <note important>Cela ne fonctionne pas si le widget (ici un bouton) est placé dans un layout.</note> <note important>Cela ne fonctionne pas si le widget (ici un bouton) est placé dans un layout.</note>
  
-Autre solution pour ne modifier que la hauteur ou la largeur... Ou les 2, qui fonctionne, que le widget redimensionner soit placé dans un layout ou non.+Autre solution pour ne modifier que la hauteur ou la largeur... Ou les 2, qui fonctionne, que le widget à redimensionner soit placé dans un layout ou non.
  
 <code javascript> <code javascript>
Ligne 142: Ligne 142:
 b.maximumWidth = 200; b.maximumWidth = 200;
  
-b.minimumWidth = 200; //Pour modifier la hauteur +b.minimumHeight = 200; //Pour modifier la hauteur 
-b.maximumWidth = 200;+b.maximumHeight = 200;
  
 b.minimumSize = new QSize(200, 200); //Pour modifier la largeur et la hauteur b.minimumSize = new QSize(200, 200); //Pour modifier la largeur et la hauteur
Ligne 183: Ligne 183:
  
 Ici, le premier paramètre envoyé à l'objet QDialog est le widget parent (ici comme c'est le widget principal de l'application, il y en a pas donc on met 0) et le second le flag. Ici, le premier paramètre envoyé à l'objet QDialog est le widget parent (ici comme c'est le widget principal de l'application, il y en a pas donc on met 0) et le second le flag.
 +
 +Exemple de flag :
 +
 +  * Qt.WindowTitleHint : Permet d'afficher uniquement le titre de la fenêtre ainsi que la croix de fermeture dans le header de la fenêtre.
 +  * Qt.MSWindowsFixedSizeDialogHint : Permet de fixer la taille de la fenêtre à la taille spécifiée dans sizeHint (En gros, cela fixe la taille de la fenêtre, elle n'est plus redimensionnable).
  
 <note important>Il est possible de spécifier plusieurs flags mais je n'ai pas trouvé comment faire avec QtScript :(.</note> <note important>Il est possible de spécifier plusieurs flags mais je n'ai pas trouvé comment faire avec QtScript :(.</note>
Ligne 197: Ligne 202:
 prennent en compte uniquement le second.  prennent en compte uniquement le second. 
    
-<code javascript>var b = new QLabel("Hello", a, Qt.AlignBottom | Qt.AlignRight;);</code>+<code javascript>var b = new QLabel("Hello", a, Qt.AlignBottom | Qt.AlignRight);</code>
  
 prend en compte uniquement le second aussi. Or prend en compte uniquement le second aussi. Or
Ligne 208: Ligne 213:
 J'ai essayer pleins de syntaxes différentes pour le QDialog mais je n'ai rien trouvé de concluant. J'ai essayer pleins de syntaxes différentes pour le QDialog mais je n'ai rien trouvé de concluant.
  
-Exemple de flag : 
- 
-  * Qt.WindowTitleHint : Permet d'afficher uniquement le titre de la fenêtre ainsi que la croix de fermeture dans le header de la fenêtre. 
-  * Qt.MSWindowsFixedSizeDialogHint : Permet de fixer la taille de la fenêtre à la taille spécifiée dans sizeHint (En gros, cela fixe la taille de la fenêtre, elle n'est plus redimensionnable). 
   * Qt.Tool : Permet d'afficher une fenêtre de type "Outil".   * Qt.Tool : Permet d'afficher une fenêtre de type "Outil".
  
Ligne 268: Ligne 269:
 b.addButton(QDialogButtonBox.Cancel); //Créer un bouton annuler dans cette boite b.addButton(QDialogButtonBox.Cancel); //Créer un bouton annuler dans cette boite
  
-b.accepted.connect(a.accept);  +b.accepted.connect(a.accept); //accepted est un signal emis par le QDialogButtonBox qui execute le slot accept du QDialog 
-b.rejected.connect(a.reject);+b.rejected.connect(a.reject); //rejected est un signal emis par le QDialogButtonBox qui execute le slot reject du QDialog
  
 a.exec(); a.exec();
Ligne 297: Ligne 298:
 var d = new QPushButton("Barre toi", c); var d = new QPushButton("Barre toi", c);
  
-b.clicked.connect(function () { +b.clicked.connect(function () { //clicked est un signal emis par le premier QPushButton qui execute une fonction anonyme
  c.show();   c.show();
 }); });
  
-d.clicked.connect(function () {+d.clicked.connect(function () { //clicked est un signal emis par le deuxième QPushButton qui execute une fonction anonyme
  c.hide();  c.hide();
 }); });
Ligne 319: Ligne 320:
  var d = new QPushButton("Barre toi", c);  var d = new QPushButton("Barre toi", c);
   
- b.clicked.connect(c, show);+ b.clicked.connect(c, show); //clicked est un signal emis par le premier QPushButton qui execute la fonction show, il envoie le QDialog c en paramètre pour qu'il puisse être montré par la fonction
   
- d.clicked.connect(c, hide);+ d.clicked.connect(c, hide); //clicked est un signal emis par le deuxième QPushButton qui execute la fonction hide, il envoie le QDialog c en paramètre pour qu'il puisse être caché par la fonction
   
  a.exec();  a.exec();
Ligne 340: Ligne 341:
  
 Il y a peut être moyen de faire ça sans tableau, mais encore une fois il n'y a pas de doc pour QtScript donc beaucoup de choses partagés ici sont des choses que j'ai trouvé en testant, à tâtons, et là j'ai pas trouvé d'autres solutions :p.  Il y a peut être moyen de faire ça sans tableau, mais encore une fois il n'y a pas de doc pour QtScript donc beaucoup de choses partagés ici sont des choses que j'ai trouvé en testant, à tâtons, et là j'ai pas trouvé d'autres solutions :p. 
 +
 +Juste pour montrer une méthode pour passer des paramètres avec connect()
 +
 +<code javascript>
 +function main() {
 + var a = new QDialog();
 + var b = new QPushButton("Coucou", a);
 +
 + var c = new QDialog(a);
 + var d = new QPushButton("Barre toi", c);
 +
 +  b.clicked.connect(function(){show(c,"pouet")}); //clicked est un signal emis par le premier QPushButton qui execute la fonction show, il envoie le QDialog c en paramètre pour qu'il puisse être montré par la fonction
 +
 + 
 + d.clicked.connect(c, hide); //clicked est un signal emis par le deuxième QPushButton qui execute la fonction hide, il envoie le QDialog c en paramètre pour qu'il puisse être caché par la fonction
 + 
 + a.exec();
 +}
 + 
 +function show(lthis,test)
 +   {
 +       Console.print(test);  // a chaque appui sur le bouton "Coucou" la console affiche "pouet"
 +       lthis.show();         // lthis récupère le c passé en paramètre pour ouvrir la seconde fenêtre
 + }
 +
 +function hide() {
 + this.hide();
 +}
 +
 +main();
 +</code>
  
 Il est possible de créer ses propres signaux et slots, mais je ne me suis pas penché sur la question. Il est possible de créer ses propres signaux et slots, mais je ne me suis pas penché sur la question.
Ligne 452: Ligne 484:
 d.setCheckState(Qt.Checked); d.setCheckState(Qt.Checked);
  
-Console.print(b.checkState());+Console.print(b.checkState()); //Affiche l'état de la checkbox dans la console
 Console.print(c.checkState()); Console.print(c.checkState());
 Console.print(d.checkState()); Console.print(d.checkState());
Ligne 475: Ligne 507:
 <code javascript> <code javascript>
 var a = new QDialog(); var a = new QDialog();
-var layout = new QFormLayout(); +var layout = new QFormLayout(); //Création d'un layout pour éviter que les radiobuttons ne se superpose 
-a.setLayout(layout);+a.setLayout(layout); //Attribue le layout à a
  
-var tabIntRadio = ["Radiobutton 0", "Radiobutton 1", "Radiobutton 2", "Radiobutton 3", "Radiobutton 4"]; +var tabIntRadio = ["Radiobutton 0", "Radiobutton 1", "Radiobutton 2", "Radiobutton 3", "Radiobutton 4"]; //Tableau contenant le libelé des boutons radio 
-var tabRadio = [];+var tabRadio = []; //Tableau les objets QRadioButton
  
-for (var i = 0; i < tabIntRadio.length; i++) { +for (var i = 0; i < tabIntRadio.length; i++) { //Boucle qui va pour chaque libelé 
- tabRadio[i] = new QRadioButton(tabIntRadio[i]); + tabRadio[i] = new QRadioButton(tabIntRadio[i]); //Créer un objet QRadioButton ce libelé 
- layout.addRow(tabRadio[i]);+ layout.addRow(tabRadio[i]); //Attribuer les radiobuttons au layout
  
- tabRadio[i].toggled.connect(tabRadio[i], function () {+ tabRadio[i].toggled.connect(tabRadio[i], function () { //Lors du click sur un QRadioButton, test pour voir si il est checké
  if (this.checked === true)  if (this.checked === true)
  Console.print(this.text);  Console.print(this.text);
Ligne 500: Ligne 532:
 == Signaux == == Signaux ==
  
-L'unique signal est toggled.+Il y a le signal toggled, plus les signaux qu'il hérite de QWidget, comme clicked
  
 == Groupe de radiobutton == == Groupe de radiobutton ==
Ligne 511: Ligne 543:
  
 Ce widget a pour but l'affichage de texte (brut ou HTML), image, image animé (GIF). Ce widget a pour but l'affichage de texte (brut ou HTML), image, image animé (GIF).
 +
 +== Général && texte simple ==
  
 <code javascript> <code javascript>
 var a = new QDialog(); var a = new QDialog();
  
-var layout = new QFormLayout(); +var layout = new QFormLayout(); //Création d'un layout pour que ce soit plus jolie 
-a.setLayout(layout);+a.setLayout(layout); //Attribue le layout à a
  
 var b = new QLabel("Hello"); //Affiche un QLabel var b = new QLabel("Hello"); //Affiche un QLabel
 b.setText(b.text + " world"); //Selectionne le contenu du QLabel et rajoute du texte à la fin b.setText(b.text + " world"); //Selectionne le contenu du QLabel et rajoute du texte à la fin
  
-layout.addRow(b);+b.minimumSize = new QSize(500, 500); //Gestion de sa taille, attention il est contenu dans un layout 
 +b.maximumSize = new QSize(500, 500); 
 + 
 +b.alignment = Qt.AlignBottom | Qt.AlignRight; //Gestion de l'alignement du texte 
 + 
 +b.textInteractionFlags = Qt.TextSelectableByMouse; //Il est ainsi possible de sélectionner le texte à la souris 
 + 
 +layout.addRow(b); //Attribut le QLabel au layout
  
 a.exec(); a.exec();
 </code> </code>
  
-La méthode setText permet d'attribuer du texte à un QLabel. La propriété text permet de le récupérer.+{{ :fr:qlabel-texte-simple.png?nolink | Screen of QLabel, with simple text }} 
 + 
 +La méthode setText permet d'attribuer du texte à un QLabel. 
 + 
 +La propriété text permet de le récupérer. 
 + 
 +La propriété alignement attend un flag horizontal, vertical, ou les 2. 
 + 
 +  * **Horizontal** 
 + 
 +  * Qt.AlignLeft 
 +  * Qt.AlignRight 
 +  * Qt.AlignHCenter 
 +  * Qt.AlignJustify 
 + 
 +  * **Vertical** 
 + 
 +  * Qt.AlignTop 
 +  * Qt.AlignBottom 
 +  * Qt.AlignVCenter 
 + 
 +Par défault, le texte est impossible à sélectionner, copier. La propriété textInteractionFlags permet de rajouter des comportements au QLabel. 
 + 
 +  * Qt.TextSelectableByMouse 
 +  * Qt.TextSelectableByKeyboard => La politique de focus du widget est forcé à Qt.ClickFocus 
 +  * Qt.LinksAccessibleByMouse 
 +  * Qt.LinksAccessibleByKeyboard => La politique de focus du widget est forcé à Qt.StrongFocus 
 + 
 +== HTML ==
  
 <code javascript> <code javascript>
 var a = new QDialog(); var a = new QDialog();
  
-var layout = new QFormLayout(); +var layout = new QFormLayout(); //Création d'un layout pour que ce soit plus jolie 
-a.setLayout(layout);+a.setLayout(layout); //Attribue le layout à a
  
-var b = new QLabel("Hello", a, Qt.AlignBottom | Qt.AlignRight); //Ne marche pas, seul le dernier est pris en compte, si plus de 2, utiliser .alignement +var b = new QLabel(); //Affiche un QLabel 
-b.setText(b.text + world");+b.setText("<h1>Hello</h1><p><b>World ?</b></p><p><i>No !</i></p><p><a href=\"www.nelson-haha.com/\">Ah-Ah</a></p>"); //Ajout du texte dans le QLabel
  
-b.minimumSize = new QSize(500, 500); +layout.addRow(b); //Attribut le QLabel au layout
-b.maximumSize = new QSize(500, 500);+
  
-//b.indent = 150+a.exec()
-//b.alignment = Qt.AlignBottom | Qt.AlignRight;+</code>
  
-layout.addRow(b);+{{ :fr:qlabel-html.png?nolink | Screen of QLabel, with HTML }} 
 + 
 +<note>Vous remarquerez la qualité indéniable du texte de ce QLabel !</note> 
 + 
 +Vous remarquez qu'il ne se passe rien quand le lien est cliqué, de plus il est impossible de le sélectionner, copier. 
 + 
 +<code javascript> 
 +b.textInteractionFlags = Qt.LinksAccessibleByMouse; 
 +</code> 
 + 
 +A rajouter pour que le lien puisse être copié, mais ça vous le savez =) 
 + 
 +<code javascript> 
 +b.textInteractionFlags = Qt.LinksAccessibleByMouse | Qt.LinksAccessibleByKeyboard | Qt.TextSelectableByMouse; 
 +</code> 
 + 
 +Si plusieurs flags... Au cas où =) 
 + 
 +<code javascript> 
 +b.openExternalLinks = true; 
 +</code> 
 + 
 +Pour qu'il ne se passe pas rien lors d'un click sur le lien ! 
 + 
 +<code javascript> 
 +b.linkActivated.connect(function(link) { //Le signal linkActivated est émis lors de l'actiovation du lien qui sera le plus souvent un simple click dessus, il renvoie une chaine de caractère (link) contenant le lien activé  
 + var a = QDesktopServices;  
 + a.openUrl(new QUrl(link)); //Ouverture de ce lien dans un nouvel onglet de votre navigateur préféré 
 +}); 
 +</code> 
 + 
 +Ou comme ça aussi =) 
 + 
 +La variable link est une chaine de caractère qui contient le lien activé. 
 + 
 +Ok, si c'est juste pour ouvrir l'URL que vous avez mis dans le lien, le premier code suffit, mais si vous avez un esprit machiavélique, je vous laisse réfléchir à la meilleur utilisation de ce code :p ! 
 + 
 +Ceci dit, Actiona est aussi là pour vous soulager dans cette dur et noble tâche (l'ouverture d'un lien dans un nouvel onglet du navigateur par défault), je vous laisse chercher sur le wiki le code héhé =). 
 + 
 +== Image == 
 + 
 +<code javascript> 
 +var a = new QDialog(); 
 +a.setWindowTitle("Salamèche est le plus beau"); //Celui qui me contredit, je le tabasse ! 
 + 
 +var layout = new QFormLayout(); //Vous connaissez la chanson 
 +a.setLayout(layout); //Lalalah 
 + 
 +var b = new QLabel(); 
 +b.setPixmap(new QPixmap("charmander.jpg")); //On attribut l'image au QLabel 
 + 
 +layout.addRow(b); //lalalah (bis)
  
 a.exec(); a.exec();
 </code> </code>
  
 +{{ :fr:qlabel-image.png?nolink&300 | Screen of QLabel, with image }}
 +
 +Ici, rien de bien nouveau, ormis qu'au lieu d'attribuer du texte au QLabel avec setText, on attribut une image avec setPixmap, setPixmap attendant un objet QPixmap en paramètre.
 +
 +== image animé (GIF) ==
 +
 +<code javascript>
 +var a = new QDialog();
 +a.setWindowTitle("Les gifs, c'est la vie !"); //Attribution d'un titre à la fenêtre
 +
 +var layout = new QFormLayout(); //Création du layout
 +a.setLayout(layout); //Attribution du layout à l'objet QDialog
 +
 +var b = new QLabel(); //Création d'un QLabel
 +var c = new QMovie("charmander.gif") //Création d'un objet QMovie
 +b.setMovie(c); //On attribut le QMovie au QLabel
 +
 +c.start(); //Lecture du gif
 +
 +layout.addRow(b); //On ajoute l'objet QLabel dans le layout
 +
 +a.exec();
 +</code>
 +
 +Pour ajouter un gif dans un QLabel, il faut utiliser la méthode setMovie, qui attend un objet QMovie en paramètre, lui même attendant le chemin du gif que vous voulez lire.
 +
 +Ensuite il faut démarrer la lecture du gif avec la méthode start() appliqué au QMovie.
 +
 +Il est possible de contrôler la lecture du gif avec certaines méthodes comme :
 +
 +  * **start** : Elle affiche et lance la lecture du gif. Il faut savoir que sans cette méthode le gif ne s'affichera pas
 +  * **stop** : Elle stop la lecture du gif, si start est lancé ensuite, le gif reprendra depuis le débuts
 +  * **setPaused** //(true|false)// : Pour mettre en pause la lecture du gif, il attend 1 paramètre, true pour mettre la pause, false pour l'enlever, il est aussi possible de faire redémarrer la lecture avec la méthode start
 +  * **jumpToFrame** //(int)// : Pour changer la frame affichée, retourne true si succès, sinon retourne false
 +  * **jumpToNextFrame** : Pour passer à la frame suivante, retourne true si succès, sinon retourne false
 +
 +Il est possible de régler la vitesse de lecture avec la propriété speed
 +
 +<code javascript>
 +c.speed = 200; //x2
 +</code>
 +
 +<note important>Il est aparement possible de définir le nombre de fois que le gif va se lire car une méthode permet de récupérer ce chiffre (loopCount()), cependant je ne trouve pas la propriété qui permet de définir ce nombre é_è. Apparement présent dans l'objet QAbstractAnimation :S
 +</note>
 +
 +Il est cependant possible de récupérer ce nombre grâce au signal finished, qui est émis lorsque le gif est terminé.
 +
 +Les différents signaux :
 +  
 +<code javascript>
 + //Récapitulatif, utilisation signal stateChanged (bouton pause/lecture) et finished (incrément nb loop, affichage du nombre dans un QLabel)
 +</code>
  
 <note important>Ceci est loin d'être terminé mais j'avance lentement, lentement mais surement !!!!!</note> <note important>Ceci est loin d'être terminé mais j'avance lentement, lentement mais surement !!!!!</note>
fr/actionaz_qtscript.1412635163.txt.gz · Dernière modification : 2021/02/13 11:23 (modification externe)