目前我正在编写一个将水平测量数据显示在某些图表中的应用程序。我总是在x轴上有日期/时间,在y轴上有数据。我使用Qwt来修改QwtPlotPicker类以显示正确的时间标签。我通过派生和重新定义成员函数来做到这一点:
class myQwtPlotPicker : public QwtPlotPicker {
Q_OBJECT
public:
explicit myQwtPlotPicker( QWidget* canvas, bool DateScale = false );
explicit myQwtPlotPicker( int xAxis, int yAxis, QWidget* canvas, bool DateScale = false );
explicit myQwtPlotPicker( int xAxis, int yAxis, RubberBand rubberBand, DisplayMode trackerMode, QWidget* canvas, bool DateScale = false );
virtual ~myQwtPlotPicker() {};
protected:
virtual QwtText trackerTextF( const QPointF &position ) const {
... redefinition of the label text ...
}
};
如您所见,我还添加了一个新参数DateScale,可以打开或关闭日期标签。这非常有效,但有一个QwtPlotZommer类,它源于QwtPlotPicker:
class QWT_EXPORT QwtPlotZoomer: public QwtPlotPicker { };
现在,问题是,如何让QwtPlotZommer类从myQwtPlotPicker派生而不是从QwtPlotPicker派生? 或者当然我可以编辑Qwt源,但必须有一个正确的方法来做到这一点。
我希望有一个正确的方法来做到这一点。如果有人能帮助我,我会很高兴。
答案 0 :(得分:2)
尝试多重继承:
class myQwtPlotZoomer : public QwtPlotZoomer, public QwtPlotPicker { };
答案 1 :(得分:1)
在C ++中无法在运行时更改类层次结构。
答案 2 :(得分:1)
我想您应该重新考虑您的设计 - 您不能也不应该更改某些库类的继承层次结构。
您是否看过一些示例,看看您提到的课程是如何使用的?也许您应该问一个新问题,找出如何解决您实际面临的问题(例如,如果我理解正确,如何在qwt中创建可缩放的图表)
答案 3 :(得分:0)
你必须重载QwtPlotZoomer重新实现trackerTextF()。如果你还有一个独立的QwtPlotPicker的用例 - 不是QwtPlotZoomer - 你必须做两次:
类YourPicker:public QwtPlotPicker ... class YourZoomer:public QwtPlotZoomer ...
由于你的实现是单行的,我没有看到写两次的问题,但是如果你想避免这种情况,你必须将代码放到其他类中,这在两个重载方法中都被调用。