我想用两个水平轴创建绘图。底轴是线性的,顶轴是非线性的。我有一个转换数据表“底值 - >顶部值”。我发现QwtScaleEngine提供了这个功能。但是我无法使它工作,因为在QwtScaleEngine和QwtScaleDiv的子类中定义了太多记录不完整的函数。
有什么建议吗?
答案 0 :(得分:1)
您是否希望两个水平轴有效地覆盖共享轴的两个图,或者只是为了提供第一个水平轴的附加表示(例如,不同的单位)?它可能不是那么相关,我只是想了解你的问题。
我首先建议您查看QwtPlot::updateAxes()
documentation。这是我在官方Qwt文档中找到的情节,比例引擎和比例分区之间关系的最佳描述。虽然我认为Qwt没有严重记录,但我认为它缺乏对概念的高级描述。
QwtScaleDiv我看到更多的容器类型,包含轴边界和可能的刻度值。我看不出你有必要继承QwtScaleDiv。
你认为QwtScaleEngine
参与了这次转换是正确的,但至少在Qwt 6.1.0中还有更多内容。 QwtScaleEngine
支持带有QwtTransform
的转化概念(setTransformation())。如果您的转换是一个简单的数学函数,如对数,指数,二次,三次函数等,您应该能够使用QwtPowerTransform或QwtLogTransform
。如果这些不适用,您可以实施自己的QwtTransform
并将其分配给QwtScaleEngine
。据我所知,转换必须是双向的,这意味着实现transform
和invTransform
。根据我的经验,它还必须转换与缩放引擎相关联的轴相关的所有绘图项的值,包括网格线,区域等。我没有尝试在其他比例引擎上使用转换而不是默认的QwtLinearScaleEngine
,但这很有效。这是一个强大的概念。另外,请查看SVN playground(6.1.0)中的scaleengine示例。