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