fr:actionaz_qtscript
Différences
Ci-dessous, les différences entre deux révisions de la page.
Révision précédente | |||
— | fr:actionaz_qtscript [2021/02/13 11:23] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Création d'une fenêtre avec QtScript ====== | ||
+ | Après avoir lu quelques personnes ayant eu des soucis pour créer des fenêtres personnalisées, | ||
+ | |||
+ | Il necessitera malheuresement (oupah) quelques connaissances en javascript, d'un point de vue syntaxique surtout. | ||
+ | |||
+ | Tout d' | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Maintenant la liste des classes (en c++ toujours) : | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | Toute la documentation est écrite en c++, donc cela peux necessiter quelques connaissances pour le retranscrire en js. Il n' | ||
+ | |||
+ | ===== Les widgets ===== | ||
+ | |||
+ | Un widget est l' | ||
+ | |||
+ | QWidget utilisé seul permet la création d'une fenêtre. Un widget contenu dans aucun autre widget est considéré comme une fenêtre. | ||
+ | |||
+ | <code javascript> | ||
+ | var w = new QWidget(); | ||
+ | w.show(); | ||
+ | //La méthode show ne bloque pas le déroulement du programme, donc si vous utilisez ce code là tel quel, la fenêtre restera affiché une fraction de seconde avant de disparaitre. | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Il n'est pas possible de rendre une fenêtre modal avec QWidget. Ainsi, QWidget n'est pas adapté pour être utilisé comme le widget parent d'une fenêtre. (Même si cela est possible en C++ ou en Python). | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | Non modale : Est dit d'une fenêtre qui ne bloque pas les interactions possible avec le reste de l' | ||
+ | |||
+ | N' | ||
+ | |||
+ | <code javascript> | ||
+ | var b = new QPushButton(); | ||
+ | b.show(); | ||
+ | //La méthode show ne bloque pas le déroulement du programme, donc si vous utilisez ce code là tel quel, la fenêtre restera affiché une fraction de seconde avant de disparaitre. | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Bien entendu en pratique, personne ne fait ça mais plutôt ceci. | ||
+ | |||
+ | <code javascript> | ||
+ | var w = new QWidget(); | ||
+ | var b = new QPushButton(" | ||
+ | w.show(); | ||
+ | //La méthode show ne bloque pas le déroulement du programme, donc si vous utilisez ce code là tel quel, la fenêtre restera affiché une fraction de seconde avant de disparaitre. | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Un bouton dans un widget. | ||
+ | |||
+ | Évidement, vous allez vous dire que tout ce que vous avez lu précédemment ne sert à rien car cela ne reste pas affiché et vous avez partiellement raison. | ||
+ | |||
+ | Let's go pour la suite !! | ||
+ | |||
+ | ==== Les widgets spécifiques pour créer une fenêtre ==== | ||
+ | |||
+ | Les 2 principaux widget utilisés pour créer une fenêtre sont : | ||
+ | * **QDialog** : Cette classe est plus générique, | ||
+ | * **QMainWindow** : Ce widget est le plus complet, il sert a créer la fenêtre principal d'une application avec des menus, des barres d' | ||
+ | |||
+ | === Propriété de QWidget === | ||
+ | |||
+ | Je vous le rapelle, QDialog, QPushButton, | ||
+ | Il y a donc des propriétés et des méthodes qui sont communes. | ||
+ | |||
+ | < | ||
+ | Tout widget peut servir de fenêtre. | ||
+ | C'est le widget qui n'a pas de parent qui sera considéré comme étant la fenêtre.</ | ||
+ | |||
+ | Certaines sont valides pour tout types de widgets, ainsi que pour les fenêtres, d' | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Ci-dessous la liste complète des propriétés et des méthodes contenus dans l' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | == Les communes == | ||
+ | |||
+ | Ceci n'est pas une liste exhaustive, je vous renvoie [[http:// | ||
+ | |||
+ | * **cursor** : Propriété qui permet de choisir le curseur qui doit s' | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); //Créer un nouvel objet QDialog | ||
+ | a.cursor = new QCursor(Qt.CrossCursor); | ||
+ | a.exec(); //Permet d' | ||
+ | </ | ||
+ | |||
+ | Paramètre attendu par QCursor [[http:// | ||
+ | |||
+ | * **enabled** : Propriété qui permet d' | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.enabled = false; | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | * **size** : Propriété qui permet de modifier la taille d'un widget. | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.size = new QSize(200, 500); //a mesurera 200px de largeur sur 500px de hauteur | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Pour modifier uniquement la hauteur ou la largeur d'un QWidget et garder l' | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var b = new QPushButton(" | ||
+ | |||
+ | b.size = new QSize(b.sizeHint.width(), | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | Dans cette exemple, la hauteur du bouton devient 100px et la largeur reste dynamique. | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | 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> | ||
+ | var a = new QDialog(); | ||
+ | var b = new QPushButton(" | ||
+ | |||
+ | b.minimumWidth = 200; //Pour modifier la largeur | ||
+ | b.maximumWidth = 200; | ||
+ | |||
+ | b.minimumHeight = 200; //Pour modifier la hauteur | ||
+ | b.maximumHeight = 200; | ||
+ | |||
+ | b.minimumSize = new QSize(200, 200); //Pour modifier la largeur et la hauteur | ||
+ | b.maximumSize = new QSize(200, 200); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | * **visible** : Propriété qui contrôle la visibilité d'une fenêtre. | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var b = new QLabel(" | ||
+ | b.setVisible(false); | ||
+ | //b.hide(); //donne le même résultat et .show() le rend visible | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | Il n'est pas possible de rendre le widget qui tient lieu de fenêtre principal de l' | ||
+ | |||
+ | == Les spécifiques aux fenêtres == | ||
+ | |||
+ | * ** setWindowFlags() ** : Méthode permettant de définir un comportement à la fenêtre. | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.setWindowFlags(Qt.WindowTitleHint); | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | Il est aussi possible de spécifier le flag de cette manière. | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(0, Qt.WindowTitleHint); | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | Ici, le premier paramètre envoyé à l' | ||
+ | |||
+ | Exemple de flag : | ||
+ | |||
+ | * Qt.WindowTitleHint : Permet d' | ||
+ | * 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> | ||
+ | |||
+ | Le problème semble subvenir lorsque les flags sont à mettre en paramètre d'une méthode. | ||
+ | |||
+ | <code javascript> | ||
+ | |||
+ | comme | ||
+ | |||
+ | <code javascript> | ||
+ | a.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint | Qt.WindowTitleHint);</ | ||
+ | |||
+ | prennent en compte uniquement le second. | ||
+ | |||
+ | <code javascript> | ||
+ | |||
+ | prend en compte uniquement le second aussi. Or | ||
+ | |||
+ | <code javascript> | ||
+ | b.alignment = Qt.AlignBottom | Qt.AlignRight;</ | ||
+ | |||
+ | prend bien en compte les 2. | ||
+ | |||
+ | J'ai essayer pleins de syntaxes différentes pour le QDialog mais je n'ai rien trouvé de concluant. | ||
+ | |||
+ | * Qt.Tool : Permet d' | ||
+ | |||
+ | * ** setWindowTitle() ** : Méthode permettant de définir un titre à la fenêtre. | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.setWindowTitle(" | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | * ** windowIcon ** : Propriété permettant de définir une icône à la fenêtre. | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.windowIcon = new QIcon(" | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | Cette propriété attend un objet QIcon, qui lui même attend le chemin d'une image en paramètre. | ||
+ | |||
+ | * ** setWindowOpacity ** : Méthode permettant de définir l' | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.setWindowOpacity(0.5); | ||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | ==== QDialog ==== | ||
+ | |||
+ | QDialog est un widget qui a pour but d' | ||
+ | |||
+ | Une boite de dialogue est une fenêtre secondaire qui va avoir pour but d’interagir avec l' | ||
+ | |||
+ | Dans le cas d'une fenêtre principal, il est préférable d' | ||
+ | |||
+ | Il existe 2 méthodes pour définir si une fenêtre est modal ou non. Le QDialog ou QMainWindow principal de votre fenêtre sera obligatoirement modal, qui est son comportement par défaut, sinon il disparaitra à peine le script lancé. Les QDialogs secondaires peuvent ne pas être modal. | ||
+ | |||
+ | * ** exec() ** : Méthode permettant d' | ||
+ | |||
+ | * ** show() ** : Méthode permettant d' | ||
+ | |||
+ | === Les signaux et les slots === | ||
+ | |||
+ | Histoire de bien comprendre ce passage, je vous renvoie vers ce cours d' | ||
+ | |||
+ | En théorie, si vous êtes revenus ici, c'est que vous savez ce qu'est un signal et un slot, cool ! | ||
+ | |||
+ | Voyons voir : | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var b = new QDialogButtonBox(a); | ||
+ | b.addButton(QDialogButtonBox.Ok); | ||
+ | b.addButton(QDialogButtonBox.Cancel); | ||
+ | |||
+ | b.accepted.connect(a.accept); | ||
+ | b.rejected.connect(a.reject); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | <code javascript> | ||
+ | b.accepted.connect(a.accept); | ||
+ | </ | ||
+ | |||
+ | Ici, lorsque le signal " | ||
+ | |||
+ | <code javascript> | ||
+ | b.rejected.connect(a.reject); | ||
+ | </ | ||
+ | |||
+ | Ici, lorsque le signal " | ||
+ | |||
+ | Ces 2 signaux ne peuvent être émis que par un QDialogButtonBox, | ||
+ | |||
+ | Autre petit exemple de signal/slot qui va permettre au passage d' | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var b = new QPushButton(" | ||
+ | |||
+ | var c = new QDialog(a); | ||
+ | var d = new QPushButton(" | ||
+ | |||
+ | b.clicked.connect(function () { //clicked est un signal emis par le premier QPushButton qui execute une fonction anonyme | ||
+ | c.show(); | ||
+ | }); | ||
+ | |||
+ | d.clicked.connect(function () { //clicked est un signal emis par le deuxième QPushButton qui execute une fonction anonyme | ||
+ | c.hide(); | ||
+ | }); | ||
+ | |||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | Vous n’êtes pas obligé de connecter un signal à un slot prédéfinis comme les 2 précédemment vu, vous pouvez aussi le connecter à n' | ||
+ | |||
+ | <code javascript> | ||
+ | function main() { | ||
+ | var a = new QDialog(); | ||
+ | var b = new QPushButton(" | ||
+ | |||
+ | var c = new QDialog(a); | ||
+ | var d = new QPushButton(" | ||
+ | |||
+ | b.clicked.connect(c, | ||
+ | |||
+ | d.clicked.connect(c, | ||
+ | |||
+ | a.exec(); | ||
+ | } | ||
+ | |||
+ | function show() { | ||
+ | this.show(); | ||
+ | } | ||
+ | |||
+ | function hide() { | ||
+ | this.hide(); | ||
+ | } | ||
+ | |||
+ | main(); | ||
+ | </ | ||
+ | |||
+ | Si vous avez plusieurs paramètres à faire passer à votre fonction, utilisez un tableau. | ||
+ | |||
+ | 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' | ||
+ | |||
+ | Il est possible de créer ses propres signaux et slots, mais je ne me suis pas penché sur la question. | ||
+ | |||
+ | === L' | ||
+ | |||
+ | <note tip>Un widget parent est un widget qui en contient d' | ||
+ | Un widget fils est un widget qui n'en contient aucun autre.</ | ||
+ | |||
+ | '' | ||
+ | |||
+ | ==== Les boutons ==== | ||
+ | |||
+ | Il existe divers de boutons, le plus classique étant QPushButton. | ||
+ | |||
+ | Mais avant cela, il faut savoir que toutes les classes de boutons héritent de la classe mère, QAbstractButton, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Cette classe étant une classe abstraite, il n'est pas possible de l' | ||
+ | |||
+ | === QPushButton === | ||
+ | |||
+ | Ce widget est un simple bouton, rien de plus, rien de moins ! | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var b = new QPushButton(" | ||
+ | |||
+ | var c = new QPushButton(" | ||
+ | c.checkable = true; //Permet au bouton de prendre 2 états, la forme pressé et le forme relâché | ||
+ | c.checked = true; //Le bouton s' | ||
+ | |||
+ | var d = new QPushButton(" | ||
+ | d.setEnabled(false); | ||
+ | |||
+ | layout.addRow(b); | ||
+ | layout.addRow(c); | ||
+ | layout.addRow(d); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | == Signaux == | ||
+ | |||
+ | Le signal le plus utilisé est clicked(), mais il y a aussi pressed() qui s' | ||
+ | |||
+ | === QCheckBox === | ||
+ | |||
+ | Ce widget est une checkbox, appelé truc à cocher en français =). | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var b = new QCheckBox(" | ||
+ | |||
+ | var c = new QCheckBox(" | ||
+ | c.checked = true; //La checkbox s' | ||
+ | |||
+ | var d = new QCheckBox(" | ||
+ | d.setEnabled(false); | ||
+ | |||
+ | layout.addRow(b); | ||
+ | layout.addRow(c); | ||
+ | layout.addRow(d); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | == Signaux == | ||
+ | |||
+ | La checkbox émet le signal stateChanged() qui permet de récupérer l' | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | |||
+ | var b = new QCheckBox(" | ||
+ | |||
+ | b.stateChanged.connect(b, | ||
+ | Console.print(this.checkState()); | ||
+ | Console.print(this.checked); | ||
+ | }); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | Une checkbox peux avoir un 3ème état. Il faut l' | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var b = new QCheckBox(" | ||
+ | b.tristate = true; | ||
+ | var c = new QCheckBox(" | ||
+ | c.tristate = true; | ||
+ | var d = new QCheckBox(" | ||
+ | d.tristate = true; | ||
+ | |||
+ | c.setCheckState(Qt.PartiallyChecked); | ||
+ | d.setCheckState(Qt.Checked); | ||
+ | |||
+ | Console.print(b.checkState()); | ||
+ | Console.print(c.checkState()); | ||
+ | Console.print(d.checkState()); | ||
+ | |||
+ | layout.addRow(b); | ||
+ | layout.addRow(c); | ||
+ | layout.addRow(d); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | == Groupe de checkbox == | ||
+ | |||
+ | Voir QGroupBox. | ||
+ | |||
+ | === QRadioButton === | ||
+ | |||
+ | C'est aussi une case à cocher à la différence de celle au dessus, qu'il ne peux y en avoir qu'une seule de coché parmi toute celles présente dans un même QWidget. | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var tabIntRadio = [" | ||
+ | var tabRadio = []; //Tableau les objets QRadioButton | ||
+ | |||
+ | for (var i = 0; i < tabIntRadio.length; | ||
+ | tabRadio[i] = new QRadioButton(tabIntRadio[i]); | ||
+ | layout.addRow(tabRadio[i]); | ||
+ | |||
+ | tabRadio[i].toggled.connect(tabRadio[i], | ||
+ | if (this.checked === true) | ||
+ | Console.print(this.text); | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Il est possible de cocher une case ou de la désactiver grâce aux même propriétés qu’auparavant. | ||
+ | |||
+ | == Signaux == | ||
+ | |||
+ | Il y a le signal toggled, plus les signaux qu'il hérite de QWidget, comme clicked | ||
+ | |||
+ | == Groupe de radiobutton == | ||
+ | |||
+ | Voir QGroupBox. | ||
+ | |||
+ | ==== Les afficheurs ==== | ||
+ | |||
+ | === QLabel === | ||
+ | |||
+ | Ce widget a pour but l' | ||
+ | |||
+ | == Général && texte simple == | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | |||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var b = new QLabel(" | ||
+ | b.setText(b.text + " world" | ||
+ | |||
+ | 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; | ||
+ | |||
+ | b.textInteractionFlags = Qt.TextSelectableByMouse; | ||
+ | |||
+ | layout.addRow(b); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | La méthode setText permet d' | ||
+ | |||
+ | 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, | ||
+ | |||
+ | * 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> | ||
+ | var a = new QDialog(); | ||
+ | |||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var b = new QLabel(); //Affiche un QLabel | ||
+ | b.setText("< | ||
+ | |||
+ | layout.addRow(b); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | |||
+ | Vous remarquez qu'il ne se passe rien quand le lien est cliqué, de plus il est impossible de le sélectionner, | ||
+ | |||
+ | <code javascript> | ||
+ | b.textInteractionFlags = Qt.LinksAccessibleByMouse; | ||
+ | </ | ||
+ | |||
+ | A rajouter pour que le lien puisse être copié, mais ça vous le savez =) | ||
+ | |||
+ | <code javascript> | ||
+ | b.textInteractionFlags = Qt.LinksAccessibleByMouse | Qt.LinksAccessibleByKeyboard | Qt.TextSelectableByMouse; | ||
+ | </ | ||
+ | |||
+ | Si plusieurs flags... Au cas où =) | ||
+ | |||
+ | <code javascript> | ||
+ | b.openExternalLinks = true; | ||
+ | </ | ||
+ | |||
+ | 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' | ||
+ | var a = QDesktopServices; | ||
+ | a.openUrl(new QUrl(link)); | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | |||
+ | Ceci dit, Actiona est aussi là pour vous soulager dans cette dur et noble tâche (l' | ||
+ | |||
+ | == Image == | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.setWindowTitle(" | ||
+ | |||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var b = new QLabel(); | ||
+ | b.setPixmap(new QPixmap(" | ||
+ | |||
+ | layout.addRow(b); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Ici, rien de bien nouveau, ormis qu'au lieu d' | ||
+ | |||
+ | == image animé (GIF) == | ||
+ | |||
+ | <code javascript> | ||
+ | var a = new QDialog(); | ||
+ | a.setWindowTitle(" | ||
+ | |||
+ | var layout = new QFormLayout(); | ||
+ | a.setLayout(layout); | ||
+ | |||
+ | var b = new QLabel(); //Création d'un QLabel | ||
+ | var c = new QMovie(" | ||
+ | b.setMovie(c); | ||
+ | |||
+ | c.start(); //Lecture du gif | ||
+ | |||
+ | layout.addRow(b); | ||
+ | |||
+ | a.exec(); | ||
+ | </ | ||
+ | |||
+ | 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' | ||
+ | * **stop** : Elle stop la lecture du gif, si start est lancé ensuite, le gif reprendra depuis le débuts | ||
+ | * **setPaused** // | ||
+ | * **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 | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | </ | ||
+ | |||
+ | 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> | ||
+ | // | ||
+ | </ | ||
+ | |||
+ | <note important> |