Interrupteur à bascule en Qt
Je suis en train d'utiliser un élément qui est l'équivalent de Android Commutateurs dans Qt. J'ai trouvé un ToggleSwitch dans QML, mais rien dans le réel C++ Qt libs. Suis-je raté quelque chose ou vais-je avoir à ré-écrire ce widget moi-même?
Vous devez vous connecter pour publier un commentaire.
@piccy la suggestion est ce que j'ai fait pour un interrupteur à bascule précédemment. Avec un peu de bricolage tho.
Nous avons eu à imiter les comportements similaire à iOS bascule on/off. Ce qui signifie que vous besoin d'un mouvement progressif qui vous n'aurez pas à glissière avec une limite de 0-1 externes sans animations.
Donc ce que j'ai fait a été de définir l'intervalle de valeur pour le curseur pour être la même que la largeur maximale de la barre.
Connectez ensuite le curseur publié signal et de vérifier si la valeur est inférieure à la moitié du maximum et, si oui, positionnez le curseur de la valeur à 0 sinon la valeur d'un curseur à max.
Cela vous donnera un bon frein effet et clip à l'extrême lorsque vous relâchez la souris.
Si vous voulez le curseur juste à bascule lorsqu'il est cliqué sur l'autre côté, sans glisser connecter le curseur de valeur a changé de signal et de vérifier la nouvelle valeur pour être plus proche de l'extrême et la définir comme la valeur d'un curseur si le curseur n'est pas dans son état. Ne modifiez pas la valeur d'un curseur si le curseur est en bas car vous risquez alors de briser la précédente, faites glisser le mouvement.
Vous pourriez aussi le faire avec un QSlider contrôle dans une orientation horizontale qui dispose d'une gamme de 0 à 1. Vous auriez probablement souhaitez définir sa largeur maximale à quelque chose comme 50 ou alors, pour l'empêcher de s'étirant sur toute la largeur de la boîte de dialogue. Vous pouvez ensuite les ajuster avec une feuille de style pour améliorer l'apparence ou la sous-classe et en tirer le contrôle de vous-même. Il pourrait ne pas prendre trop de code pour le faire paraître de bonne.
Bien, vous aurez à utiliser QCheckBox. Ce n'est pas un Interrupteur à Bascule, mais il n'a même chose. Si vous voulez vraiment visuel différent, vous devez créer un widget personnalisé
Davita est droit dans sa réponse lorsqu'il s'agit des cases à cocher. Si vous êtes à la recherche de quelque chose de similaire à la troisième exemple cependant (les boutons on/off), vous pouvez simplement utiliser deux QPushButtons et les fixer à checkable. Faire autoexclusive dans le même temps, et vous devriez être bon d'aller.
Avec un peu de style visuel à l'aide d'une feuille de style vous devriez être en mesure de se rapprocher, si ce n'est sur place.
Ici est un Python 3 /PyQt5 mise en œuvre de @IMAN4K de réponse.
Améliorations au cours de la mise en œuvre d'origine:
Voir aussi QRadioButton et QPushButton avec checkable et quelques feuilles de styles personnalisées ou dessin peut être fait comme "on/off interrupteurs à bascule"
Je sais que ce fil est vieux, mais j'ai du mal un peu avec cette question en particulier en dépit donné une très bonne idée de la par Viv.
De toute façon, j'ai pensé que je pourrais partager avec vous la solution je suis venu ici, peut-être que ça va aider quelqu'un d'autre le long du chemin.
Une petite explication:
actionTriggered
sera appelée à chaque fois que le curseur est cliqué ou déplacé avec le clavier. Lorsqu'il est déplacé, il émettra le signal '7'. Pour éviter un accrochage, de l'action 7 est bloqué.Lors d'un déplacement vers la droite, il émet 3 tout en cliquant et 1 en frappant "droit" (ou "bas") sur le clavier, qui est pourquoi nous sommes l'alignement sur la droite quand il n'est pas un nombre pair.
Lors du déplacement de gauche, il émet 2 ou 4.
sliderReleased()
sera appelée une fois que vous lâchez le bouton de la souris après avoir fait glisser, mais en ce moment, le curseur a toujours son ancienne valeur (qui s'est déclenché moi un peu). Donc, pour obtenir la position correcte pour le composant logiciel enfichable pour que j'interrogeaissliderPosition
au lieu devalue
et c'est tout.J'espère que cela aide quelqu'un.