salut
je cherche de la doc sur mouseReleaseEvent et sur mouseMoveEvent
est ce il y a parmi vs qui a deja utiliser ces 2 méthodes virtuelle
merci
salut
je cherche de la doc sur mouseReleaseEvent et sur mouseMoveEvent
est ce il y a parmi vs qui a deja utiliser ces 2 méthodes virtuelle
merci
Bienvenue sur le forum,
Le plus simple, c'est de créer une classe qui étend QWidget, et dedans tu redéfinis la/les fonctions qui t'intéresse. C'est pas plus compliqué que ça.
Si tu veux plus d'aide, dis nous plus précisément ce que tu veux faire.
G.
salut, toute la doc Qt sans exception est ici http://qt.developpez.com/doc/4.0/classes/
Bonne continuation.
je cherche la méthode de la souris
Quand je clique sur le bouton gauche de la sourirs un signal sera emis pour ouvrir une boite de dialog
j'ai essayé de faire :
QObject::connect(ui.doubleSpinBox_7, SIGNAL(clickedSpin()), this, SLOT(clearSpin()));
void FenetrePrincipale::mousePressEvent( QMouseEvent * event ){
if (event->button() == Qt::LeftButton){
emit clickedSpin();
}
}
void FenetrePrincipale::clearSpin(){
//ui.label_10->clear();
QMessageBox::information(this, tr("A propos de moi"), tr(" boite de dialog ");
si il y a une aide n'hésitez pas svp
alors procédons par ordre, déjà apparemment ( vu le nom de tes widget ) tu utilise le designer de qt, essais de changer leur nom via celui ci se sera beaucoup plus simple pour toi !
ensuite, tu cherche un evenement sur un QDoubleSpinBox alors pourquoi cherche tu un événement de clic sourie ? le signal valueChanged(double) ne te conviendrais t'il pas ? celui ci est émit des que la valeur de la spinbox est changée.
si tel est le cas voila le code pour mettre sa en place :
class.h
class.cc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <QWidget> #include <QDoubleSpinBox> #include <QMessageBox> class classe : public QWidget { Q_OBJECT public: classe(); ~classe(); private: QDoubleSpinBox* m_sp; public slots: void monSlot(double); };
main.cc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include "class.h" classe::classe() { m_sp = new QDoubleSpinBox(this); connect(m_sp, SIGNAL(valueChanged(double)), this, SLOT(monSlot(double))); } void classe::monSlot(double){ QMessageBox::information(0, "titre", "blablablablaba....balbla"); } classe::~classe() { if(m_sp != NULL) delete m_sp; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <QApplication> #include "class.h" int main(int argc, char** argv) { QApplication app (argc, argv); classe tmp; tmp.show(); return app.exec(); }
aller je ne vais pas faire de feneantise, pour aller dans le sens que tu voulais ( avec le MouseEvent ) voici le code ( qui soit dit en passant revient au même car le signal est emit quand tu clic sur un des boutons ( = a quand tu modifie la valeur du spin ))
class.h
class.cc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <QDoubleSpinBox> #include <QMessageBox> #include <QMouseEvent> class classe : public QDoubleSpinBox { Q_OBJECT public: classe(); void mousePressEvent(QMouseEvent*); public slots: void monSlot(); signals: void monSignal(); };
main.cc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include "class.h" classe::classe() { connect(this, SIGNAL(monSignal()), this, SLOT(monSlot())); } void classe::mousePressEvent(QMouseEvent* _event){ if (_event->button() == Qt::LeftButton){ emit monSignal(); } } void classe::monSlot(){ QMessageBox::information(0, "titre", "blablablablaba....balbla"); }
tu peux aussi directement appeler le slot tel une fonction a la place d'emetre un signal et de l'y connecter ... c'est beaucoup plus simple/propre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <QApplication> #include "class.h" int main(int argc, char** argv) { QApplication app (argc, argv); classe tmp; tmp.show(); return app.exec(); }
en passant je m'excuse pour les nom vraiment bidon donné au classes et attributs mais bon j'ai fais sa vite fait avec un restant de fleme d'hier ^^
ce qu'il y c'est qu'il veut nettoyer le spin au moment où il chope le focus, et non lorsque la valeur change. Re piratos14 ^^.
Pour te dire j'ai eu la même chose à faire, voilà pourquoi je t'avais déjà mis sur la piste du focusInEvent.
Le problème avec mousePressEvent comme le dit duplo, c'est que cela n'arrivera qu'en cliquant sur le spin (c'est à dire le boutons, ou le contour si t'es précis) et non sur la zone d'édition.
Si tu veux nettoyer ton spin, ce serait préférable en recevant le focus (càd même en cliquant sur les rebords ou la zone d'édition) tu n'a même pas besoin de connect:
void Classe::focusInEvent(QFocusEvent *event)
{
clear();
}
Evidemment ça suffit pas, parce que là le spin sera toujours éffacé . Une fois de plus, a toi de voir à sous quelles conditions effacer le spin.
Dernier point, le clear() doit être fait a partir de celui qui reçoit le focus. Dans le deuxième code de duplo tu verra que sa classe est une dérivée d'un Spin.
Lorsque je vois dans ton code:
j'en déduis que ton évènemment est appelé pour la fenetre, et non pour le spin, donc tu est obligé de faire un clear() ciblé, comme tu as fait avec
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part void FenetrePrincipale::mousePressEvent( QMouseEvent * event ){
Ce qui limite grandement ton champ d'action.
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part ui.label_10->clear();
En dérivant la classe QDoubleSpin box tu pourrais créer une classe contenant des méthodes très variées.
Enfin je dit tout ça, ça se trouve chuis a coté de la plaque, mais sauf erreur de ma part, ton code ne semble pas laisser de doute sur tes intentions.
salut h3llmo
merci pour la réponse je vois bien ce que mais est ce que le cas avec Qt designer ?? tt l'interface est développer avec ce dernier .
pour bien expliquer, je cherche pas a effacer le contenu de ce spinbox
mon but est:
quand je clique sur le widget(spinbox) avec la souris que ce soit dans la zone ou sur lui même un signal qui va ouvrir une fenêtre dialog (comme une calculatrice)
j'espère que c compréhensible
Belle réponse de duplo, c'est complet !
Selon moi, le mieux à faire est ce qu'à dit Duplo dans son deuxième exemple, sauf que tu n'as pas besoin ni de signal, ni de slot, ni de connect.Cependant, faire cela t'empêchera d'utiliser les boutons classiques du SponBox. Si tu veux restreindre l'action à la zone éditable, il faut que tu utilises QDoubleSpinBox::lineEdit() pour récupérer un pointeur sur la zone éditable, puis jouer avec les positions du click et de la zone éditable, pour voir si ton click gauche a lieu sur les boutons, ou sur la zone éditable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void classe::mousePressEvent(QMouseEvent* _event){ if (_event->button() == Qt::LeftButton){ if(!monWidget->isVisible()) monWidget->show(); monWidget->raise(); } }
Je pense aussi qu'il faudra, dans le mousePressEvent, appeler la fonction de la classe mère afin de garder le fonctionnement des boutons.
Bonne chance,
G.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager