2017-06-28 2 views
1

Je veux faire quelques fonctions sur une série dicom (avec qt et vtk), et je veux faire quelques connexions entre la fenêtre qt et la souris.Comment effectuer effectuer de nombreuses fonctions dans mousepressevent

Ceci est ma conception primaire: this is my primary design

Par exemple, si je clique sur zoombutton, puis je clique sur mon image avec le bouton gauche de la souris, je veux que l'image est agrandie, I sachez que nous devons utiliser la fonction mousePressEvent mais j'ai vu que nous devons utiliser ce nom pour toute connexion avec la souris, ou que je veux faire 4 ou 5 fonctions comme celle-ci, chacune pour un bouton-poussoir. Comment puis-je faire cela?

Répondre

3

Comme vous l'avez suggéré correctement, vous devez utiliser mousePressEvent pour capturer une action de la souris. Pour effectuer l'action correcte sur une pression de la souris (zoom, panoramique, ...), vous devez vous souvenir du dernier bouton enfoncé et appeler la méthode appropriée en conséquence. Cela peut être mis en œuvre comme suit:

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    MainWindow() 
    { 
     connect(ui->panButton, &QPushButton::clicked, this, &MainWindow::onPan) 
     connect(ui->zoomButton, &QPushButton::clicked, this, &MainWindow::onZoom) 
     ... 
    } 

protected slots: 
    enum Action {None, Pan, Zoom, ...}; 
    void onPan() {currentAction = Pan;} 
    void onZoom() {currentAction = Zoom;} 

protected: 
    void mousePressEvent(QMouseEvent *event) 
    { 
     switch(currentAction) 
     { 
     case Pan: 
      // perform Pan operation 
      break; 
     case Zoom: 
      // perform Zoom operation 
      break; 
     } 
    } 

protected: 
    Action currentAction; 
}; 
+1

merci pour votre aide, je suis en train cette solution et je suis en train d'écrire le pan de funtions, zoom ... je vais vous dire le résultat – Jasseur

+0

cela fonctionne bien! THX – Jasseur