0

目前我正在编写一个应用程序,它将液位测量数据显示到一些图表中。我总是在 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 源,但必须有正确的方法来做到这一点。

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

4

4 回答 4

2

尝试多重继承:

class myQwtPlotZoomer : public QwtPlotZoomer, public QwtPlotPicker { };
于 2013-09-04T09:52:08.107 回答
1

在 C++ 中,无法在运行时更改类层次结构。

于 2013-09-04T09:36:23.257 回答
1

我想您应该重新考虑您的设计 - 您不能也不应该更改某些库类的继承层次结构。

您是否查看了一些示例以了解您提到的类是如何使用的?也许您应该提出一个新问题,以了解如何解决您实际面临的问题(即,如果我理解正确,如何在 qwt 中创建可缩放图)

于 2013-09-04T09:53:13.893 回答
0

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

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

由于您的实现是单行的,因此我认为两次编写都没有问题,但是如果您想避免这种情况,则必须将代码放到其他类中,该类在两个重载方法中都被调用。

于 2013-09-05T05:09:24.120 回答