Qt QLabel cliquez sur l'événement
Je suis nouveau dans Qt et avez une question.
J'ai QLabel
et QLineEdit
objets, et quand QLabel
texte est cliqué, je veux mettre ce texte dans QLineEdit
.
Aussi j'ai lu que QLabel
n'a pas cliqué sur le signal.
Pouvez-vous expliquer comment je peux le faire et d'écrire un code pour moi ?!
vous avez à la sous-classe QLabel : regardez ici wiki.qt.io/Clickable_QLabel
Je voudrais émettre le signal sur
Je voudrais émettre le signal sur
mouseReleaseEvent
et pas sur mousePressEvent
. Le clic n'est pas complète jusqu'à ce que la souris est relâché.OriginalL'auteur Nicholas | 2015-08-14
Vous devez vous connecter pour publier un commentaire.
Le style d'un autre type de QWidget telles que des QPushButton à ressembler à un QLabel et l'utilisation de son clicked() du signal ou d'hériter de QLabel vous-même et émettre votre propre clicked() du signal.
Voir cet exemple:
https://wiki.qt.io/Clickable_QLabel
Si vous choisissez la dernière option, vous pouvez passer le texte dans le signal. Ensuite, connecter le nécessaire signaux/slots entre le QLabel et le QLineEdit:
OriginalL'auteur kh25
Un moyen simple pour y parvenir, sans nécessité de sous-classement, est une source de signal qui surveille les événements sur un objet et émet des signaux pertinents:
La
emit
mot-clé est vide macro, Qt définit comme suit:C'est pour une utilisation par les humains comme de la documentation d'aide du préfixe seulement, le compilateur et
moc
l'ignorer. Une documentation d'aide, cela signifie: la suite de l'appel de méthode est un signal d'émission. Les signaux sont simplement des méthodes dont la mise en œuvre est généré parmoc
- c'est pourquoi nous avons à#include "main.moc"
ci-dessous pour inclure toutes les implémentations quimoc
a généré pour la classe de l'objet(es) dans ce fichier. Il y a sinon rien de spécial ou de magique à un signal. Dans cet exemple, vous pourriez chercher dans le dossier de création d'un fichier appelémain.moc
et de voir la mise en œuvre (définition) devoid MouseButtonSignaler::mouseButtonEvent( .. )
.Vous pouvez ensuite installer le signaleur sur un certain nombre de widgets, tels que les
QLabel
:OriginalL'auteur Kuba Ober
Vous avez besoin pour créer une Étiquette Personnalisée de classe, qui va hériter de
QLabel
. Ensuite, vous pouvez utiliserMouseButtonRelease
événement pour vérifier en cliquant sur l'Étiquette etemit
personnalisé de votre signal et de l'attraper dans unSLOT
.Votre
.h
fichier sera comme ci-dessous:Dans votre
.cpp
fichier, votre constructeur de connecter le signal & fente comme ci-dessous :Restant
event
méthode etSLOT
méthode sera mise en œuvre en tant que ci-dessous:Pour Changer un Texte sur
QLineEdit
, vous devez créer une Classe Personnalisée et de partager pointeur d'objet personnaliséQLabel
Classe. Veuillez vérifier le code de test à ce lienVous devez créer QLineEdit objet et de partager le pointeur avec QLable, de toute façon j'ai fait un projet rapide. Veuillez vérifier le lien dans la réponse
Et une question s'il vous plaît: pourquoi faut-il émettre un signal, lorsque nous pouvons nous connecter à l'aide de Qt::connect ? Ce n'émettent mot-clé et quand l'utiliser ?
Ce lien va vous expliquer, de signaux et de slots : doc.qt.io/qt-4.8/signalsandslots.html
Si vous faites le
myLabelClicked()
signal passer unQString
paramètre, qui peut simplement être connecté à lasetText()
fente de laQLineEdit
. Pas besoin de passer un pointeur.OriginalL'auteur Samurai Jack