C++ 更改现有派生类的基类

C++ 更改现有派生类的基类,c++,C++,目前,我正在编写一个应用程序,将液位测量数据显示在一些图形中。我总是在x轴上有日期/时间,在y轴上有数据。我将Qwt用于该类,并修改了QwtPlotPicker类以显示正确的时间标签。我通过派生和重新定义成员函数实现了这一点: class myQwtPlotPicker : public QwtPlotPicker { Q_OBJECT public: explicit myQwtPlotPicker( QWidget* canvas, bool DateScale = false );

目前,我正在编写一个应用程序,将液位测量数据显示在一些图形中。我总是在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,用于打开或关闭日期标签。这非常有效,但有一个从QwtPlotPicker派生的类QwtPlotZommer:

class QWT_EXPORT QwtPlotZoomer: public QwtPlotPicker { };
现在,问题是,如何让类QwtPlotZommer派生自myQwtPlotPicker而不是QwtPlotPicker? 当然,我也可以编辑Qwt源代码,但必须有一个正确的方法来做到这一点


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

< P> >在C++中运行时没有改变类层次结构的方法。

< P>在C++中运行时没有改变类层次结构的方法。

< P>尝试多重继承:

class myQwtPlotZoomer : public QwtPlotZoomer, public QwtPlotPicker { };

尝试多重继承:

class myQwtPlotZoomer : public QwtPlotZoomer, public QwtPlotPicker { };

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


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

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


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

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

类选择器:公共QwtPlotPicker。。。 类YourZoomer:public QwtPlotZoomer


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

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

类选择器:公共QwtPlotPicker。。。 类YourZoomer:public QwtPlotZoomer


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

虽然这是事实,但问题不在于运行时。OP在编译时需要这样做。虽然这是事实,但问题不在于运行时。OP在编译时需要它。为什么需要更改
QwtPlotZoomer
的基类?你想解决什么问题?这是一个XY问题。用户2746051,请尝试告诉我们您试图解决的问题,而不是询问您尝试的解决方案(无法完成)。@Synxis:QwtPlotPicker(浮点)打印的标签不适合时间轴。这就是为什么我改变了QwtPlotPicker。现在,当使用QwtPlotZoomer(源自QwtPlotPicker)时,我从那里获得“旧”标签,而不是修改后的标签。因此,我尝试从myQwtPlotPicker而不是原始的QwtPlotPicker获取QwtPlotZoomer。@Hulk:不,我的问题不是如何在QWT中设置正确的绘图,我知道如何进行此操作。@mfranke Ok,所以您正试图找到一种自定义绘图中标签工作方式的方法。我不知道如何做到这一点,但如果您提出一个新问题,描述您希望绘图的具体行为以及默认行为不被您接受的方式,可能会产生更好的结果。为什么您需要更改
QwtPlotZoomer
的基类?你想解决什么问题?这是一个XY问题。用户2746051,请尝试告诉我们您试图解决的问题,而不是询问您尝试的解决方案(无法完成)。@Synxis:QwtPlotPicker(浮点)打印的标签不适合时间轴。这就是为什么我改变了QwtPlotPicker。现在,当使用QwtPlotZoomer(源自QwtPlotPicker)时,我从那里获得“旧”标签,而不是修改后的标签。因此,我尝试从myQwtPlotPicker而不是原始的QwtPlotPicker获取QwtPlotZoomer。@Hulk:不,我的问题不是如何在QWT中设置正确的绘图,我知道如何进行此操作。@mfranke Ok,所以您正试图找到一种自定义绘图中标签工作方式的方法。我不知道如何做到这一点,但如果你问一个新问题,描述你到底希望你的情节表现如何,以及默认行为在哪一方面不被你接受,可能会产生更好的结果。不,缩放在所有图形上都很好。创建缩放区域时只有标签不是我想要的。标签为浮点精度,这对日期/时间轴不有用。因为没有用于更改标签的函数,所以我尝试重新定义一个函数。不,缩放在所有图形上都可以正常工作。创建缩放区域时只有标签不是我想要的。标签为浮点精度,这对日期/时间轴不有用。由于没有用于更改标签的函数,我尝试重新定义函数。抱歉,但我不明白这如何有助于从myQwtPlotPicker而不是QwtPlotPicker派生。抱歉,但我不明白这如何有助于从myQwtPlotPicker而不是QwtPlotPicker派生。