Bonjour à toutes et à tous,
Je suis entrain de réaliser une application offrant une vérification expérimentale de la loi de Fitts. Pour se faire j'utilise des objets QGraphicsEllipseItem et je souhaite lancer une action lorsque l'utilisateur passe la souris dessus (comme un hover).
Voici brièvement le code donc je dispose (3 fichiers) :
main.cpp
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 #include <QApplication> #include <QTextCodec> #include "mainwindow.h" int main(int argc, char **argv) { QApplication app(argc, argv); // Définition de l'encodage QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); MainWindow window; window.show(); return app.exec(); }
mainwindow.h
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtGui> #include "Rond.h" class MainWindow : public QWidget { Q_OBJECT public: MainWindow(); public slots: void beginTest(); void addPoint(); void onclicked(); void restart(); private: int nb_rond; int nb_rond_max; QGraphicsScene *scene; QGraphicsView *view; QDesktopWidget *ecran; QGroupBox *resultat_theorique; QGroupBox *resultat_pratique; QPushButton *bouton; QPushButton *next; QPushButton *bouton_restart; // Menus QMenuBar *menu_bar; QMenu *menu_fichier; QMenu *menu_help; QLabel *label_accueil; QLabel *info_test; QList<QGraphicsEllipseItem*> ronds; }; #endif
mainwindow.cpp
J'ai lu qu'il fallait redéfinir des fonctions du style hoverEnterEvent ou hoverLeaveEvent, mais je ne vois absolument pas de quel manière.
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 #include "mainwindow.h" MainWindow::MainWindow() : QWidget() { // Initialisation des variables et de la fenêtre principale } void MainWindow::beginTest() { scene = new QGraphicsScene(QRect(0, 0, this->width()-22, this->height()-67)); scene->setBackgroundBrush(Qt::white); view = new QGraphicsView(this); view->setScene(scene); view->setGeometry(QRect(10, 30, this->width()-20, this->height()-65)); view->show(); qDebug() << "Début de l'expérimentation"; bouton->hide(); label_accueil->hide(); info_test->show(); addPoint(); } void MainWindow::addPoint() { for(int i = 0; i < ronds.size(); i++) { scene->removeItem(ronds[i]); } int x = qrand()%((int)(scene->width())); int y = qrand()%((int)(scene->height())); int d = qrand()%100; if((x+d) > scene->width() || (y+d) > scene->height() || (x-d) < 0 || (y-d-20) < 0 || d < 9) { qDebug() << "Hors écran"; } QGraphicsEllipseItem *ellipseItem = new QGraphicsEllipseItem(QRect(x, y, d, d), 0, scene); ellipseItem->setPen(QPen(Qt::green)); ellipseItem->setBrush(Qt::green); ellipseItem->setAcceptsHoverEvents(true); qDebug() << "Ajout d'un nouveau rond : x:" << x << ", y:" << y << ", d:" << d; ronds.append(ellipseItem); } void MainWindow::onclicked() { // Action lorsque l'on va survolé un objet QGraphicsEllipseItem } void MainWindow::restart() { // Action pour recommencer le test }
Merci d'avance pour votre aide.
Cordialement.
Partager