使用 ctrl + 鼠标滚轮进行缩放

Posted

技术标签:

【中文标题】使用 ctrl + 鼠标滚轮进行缩放【英文标题】:zooming with ctrl + mouse wheel 【发布时间】:2014-01-02 08:59:36 【问题描述】:

我的问题对我来说很有趣。我正在研究 Qwt,我想分别启用缩放尊重 X 和 Y 轴。我只实现了 X 轴缩放,但 Y 轴不起作用。我无法得到它。如果您提供建议,我将很高兴。

这是我的代码:

void Kmh::keyPressEvent(QKeyEvent *event)

    zoom_in_out = new QwtPlotMagnifier( canvas() );

    if(event->key() == Qt::Key_Shift)
    
        zoom_in_out->setWheelModifiers(Qt::ShiftModifier);
        zoom_in_out->setAxisEnabled(Qt::XAxis,false);
    
    else if(event->key() == Qt::Key_Control)
    
        zoom_in_out->setWheelModifiers(Qt::ControlModifier);
        zoom_in_out->setAxisEnabled(Qt::YAxis,false);
    
  

shift + 鼠标滚轮用于缩放 X 轴。但是 ctrl + mousewheel 正在缩放 X 和 Y 轴。我究竟做错了什么?

问候

注意:对不起我的英语不好。

【问题讨论】:

我对Qwt了解不多,但是有没有为Ctrl+鼠标滚轮事件实现默认行为? 你为什么使用keyPressEvent?您可以使用wheelEvent 并检查QApplication::keyboardModifiers() 值来检查是否按下了Shift 或Ctrl。 【参考方案1】:

您完全误解了 Qwt API。我会说你有内存泄漏,对于大多数工具来说仍然无法检测到。 QwtPlotMagnifier 应该在构建过程中创建一次,并在需要的时候一直存在。

我检查了the code,并且我怀疑QwtPlotMagnifier 使用事件过滤器来处理情节的事件。在施工时调用一次应该可以解决问题:

void Kmh::setupWheelZooming()

    QwtPlotMagnifier *zoom_x = new QwtPlotMagnifier( canvas() );
    QwtPlotMagnifier *zoom_y = new QwtPlotMagnifier( canvas() );
    zoom_x->setWheelModifiers(Qt::ShiftModifier);
    zoom_x->setAxisEnabled(Qt::XAxis, true);
    zoom_x->setAxisEnabled(Qt::YAxis,false);
    zoom_y->setWheelModifiers(Qt::ControlModifier);
    zoom_y->setAxisEnabled(Qt::XAxis,false);
    zoom_y->setAxisEnabled(Qt::YAxis,true);
 

这应该可以在不手动处理任何事件的情况下解决问题。

【讨论】:

感谢@Marek 的回复。我试过你的代码,但结果是一样的。 X 轴可以,但相对于 Y 轴不起作用。这里是你看清楚的视频。link 所以也许问题是默认值?尝试代码更新(额外 2 行)。 that is not a problem 默认启用所有轴。我会尝试不同的WheelModifiers,也许有一些问题。 我现在明白了。它应该是 QwtPlot::xBottomQwtPlot::yLeft。它现在工作正常。感谢您的关注。 :),好课请仔细阅读文档。无论如何 API 应该使用类型 QwtPlot::Axis 而不是 int 那么这很容易避免。我希望至少我已经帮助你正确使用QwtPlotMagnifier

以上是关于使用 ctrl + 鼠标滚轮进行缩放的主要内容,如果未能解决你的问题,请参考以下文章

Chrome64基础 缩放比例 ctrl+鼠标滚轮(放大字体,保护视力)

electronchrome缩放

Visual Studio Code 缩放设置

Java AWT 图形界面编程使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )

用jQuery实现 使用鼠标滚轮对外部图片进行缩放

Unity快捷键