2011-10-18 41 views
4

我想创建两个水平轴的情节。底部轴线是线性的,顶部轴线是非线性的。我有一个数据表格用于转换“底部值 - >顶部值”。我发现QwtScaleEngine提供了这个功能。但是我不能使它工作,因为在QwtScaleEngine和QwtScaleDiv的子类中定义了太多严重文档化的函数。QwtPlot自定义轴

有什么建议吗?

回答

1

你想两个水平轴以有效地覆盖共用轴线两条曲线,或者仅仅以提供第一水平轴的附加表示(例如不同的单元)?这可能不是所有相关的,我只是想了解你的问题。

我首先建议你看看QwtPlot::updateAxes() documentation。这是我对官方Qwt文档中的情节,规模引擎和规模划分之间关系的最好描述。虽然我不认为Qwt的文档记录很糟糕,但我确实认为它没有对这些概念进行高级描述。

QwtScaleDiv我看到的更多的容器类型,包含轴线边界和潜在蜱值。我看不到你需要继承QwtScaleDiv。

你是正确QwtScaleEngine参与这种转换,但还有更多的这一点,至少在QWT 6.1.0。 QwtScaleEngine支持setTransformation()的转换概念(QwtTransform)。如果您的转换是一个简单的数学函数,如对数,指数,二次,三次函数等,你应该能够使用QwtPowerTransformQwtLogTransform。如果这些不适用,您可以实施您自己的QwtTransform并将其分配给QwtScaleEngine。据我所知,转换必须是双向的,这意味着实施transforminvTransform。根据我的经验,还必须变换值与刻度引擎相关联,包括网格线的轴线,区域等使用于其他规模的发动机比默认QwtLinearScaleEngine转换我还没有尝试过相关的所有情节的项目,但已经工作大。这是一个强大的概念。另外,请看SVN playground(6.1.0)中的scaleengine示例。