如何在 mousepressevent 中执行许多功能

How to make perform many functions in mousepressevent

我想在 dicom 系列(使用 qt 和 vtk)上实现一些功能,我想在 qt window 和鼠标之间建立一些连接。

这是我的主要设计:

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

正如您正确建议的那样,您应该使用 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;
};