目前,我正在编写一个将电平测量数据显示为一些图形的应用程序。我总是在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来源,但是必须有适当的方法来做到这一点。

我希望有适当的方法可以做到这一点。如果有人可以帮助我,我会很高兴。

最佳答案

您必须重载QwtPlotZoomer以重新实现trackerTextF()。如果您还有一个独立的QwtPlotPicker用例(不是QwtPlotZoomer),则必须执行两次:

类YourPicker:公共QwtPlotPicker ...
类YourZoomer:公共QwtPlotZoomer ...

由于您的实现是单行的,所以我不会在两次编写中遇到任何问题,但是如果要避免这种情况,则必须将代码放入其他类中,这在两个重载方法中都将被调用。

关于c++ - 更改现有派生类的基类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18610218/

10-12 14:57