使用 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::xBottom 和 QwtPlot::yLeft。它现在工作正常。感谢您的关注。
:),好课请仔细阅读文档。无论如何 API 应该使用类型 QwtPlot::Axis
而不是 int
那么这很容易避免。我希望至少我已经帮助你正确使用QwtPlotMagnifier
。以上是关于使用 ctrl + 鼠标滚轮进行缩放的主要内容,如果未能解决你的问题,请参考以下文章
Chrome64基础 缩放比例 ctrl+鼠标滚轮(放大字体,保护视力)
Java AWT 图形界面编程使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )