如何在 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;
};
我想在 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;
};