- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的应用程序中,我使用 QChart
来显示折线图。不幸的是,Qt Charts 不支持使用鼠标滚轮缩放和通过鼠标滚动等基本功能。是的,有 RubberBand 功能,但仍然不支持滚动等,这对用户来说不是那么直观。此外,我只需要缩放 x 轴,某种 setRubberBand(QChartView::HorizontalRubberBand)
但使用鼠标滚轮。到目前为止,在深入了解 QChartView
之后,我使用了以下解决方法:
class ChartView : public QChartView {
protected:
void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE
{
QRectF rect = chart()->plotArea();
if(event->angleDelta().y() > 0)
{
rect.setX(rect.x() + rect.width() / 4);
rect.setWidth(rect.width() / 2);
}
else
{
qreal adjustment = rect.width() / 2;
rect.adjust(-adjustment, 0, adjustment, 0);
}
chart()->zoomIn(rect);
event->accept();
QChartView::wheelEvent(event);
}
}
这行得通,但放大然后缩小不会导致相同的结果。有一个小偏差。调试后我发现 chart()->plotArea()
总是返回相同的矩形,所以这个解决方法是无用的。
有什么方法可以只获取可见区域的矩形吗?或者有人可以指出正确的解决方案如何通过鼠标为 QChartView 进行缩放/滚动?
最佳答案
您可以使用 zoom()
而不是使用 zoomIn()
和 zoomOut()
,如下所示:
class ChartView : public QChartView {
protected:
void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE
{
qreal factor = event->angleDelta().y() > 0? 0.5: 2.0;
chart()->zoom(factor);
event->accept();
QChartView::wheelEvent(event);
}
};
关于zoomIn()
和zoomOut()
,具体指的是什么坐标还不清楚,我还在投资中,等我有更多的信息再说更新我的答案。
更新:
据我观察,其中一个问题是 float 的乘法,另一个是定位图形的中心,为了不出现这些问题,我的解决方案是重置缩放,然后设置更改:
class ChartView : public QChartView {
qreal mFactor=1.0;
protected:
void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE
{
chart()->zoomReset();
mFactor *= event->angleDelta().y() > 0 ? 0.5 : 2;
QRectF rect = chart()->plotArea();
QPointF c = chart()->plotArea().center();
rect.setWidth(mFactor*rect.width());
rect.moveCenter(c);
chart()->zoomIn(rect);
QChartView::wheelEvent(event);
}
};
关于c++ - 使用鼠标滚轮缩放 QChartView 的 x 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48623595/
我相信绝大多数小伙伴在自学python时,运用pycharm进行编写程序时发现字体太小不方便进行编写,通常像codeblocks这样的编程软件可以通过“ctrl+滚轮”进行放大和缩小。而
在我的应用程序中,我使用了 Scroller零件。我似乎无法弄清楚我应该在哪个事件上设置一个监听器以便知道何时滚动内容。我试过Event.CHANGE在 Scroller.verticalScroll
我正在使用一个简单的 progressDialog,它运行正常但轮子没有进步: //Progress Dialog final ProgressDialog dialo
我想在点击文本字段时关闭键盘,以便为该文本字段下方的选择器留出空间。 struct ContentView: View { @State private var date = Date()
我是一名优秀的程序员,十分优秀!