如何在mousepressevent中执行许多功能

时间:2017-06-28 08:16:36

标签: c++ qt vtk dicom

我想在dicom系列上使用qt和vtk制作一些函数,我想在qt窗口和鼠标之间建立一些连接。

这是我的主要设计: this is my primary design

例如,如果我点击zoombutton,然后我用鼠标左键点击我的图像,我希望图像将被缩放, 我知道我们必须使用函数mousePressEvent,但我已经看到我们必须使用这个名称与鼠标的任何连接,或者我想做4或5这样的函数,每个函数用于一个按钮。 我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

正如您的建议,您应该使用mousePressEvent捕获鼠标按下操作。要在鼠标按下(缩放,平移......)上执行正确的操作,您应该记住最后按下的按钮并相应地调用相应的方法。这可以实现如下:

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;
};