更改现有派生类的基类
Change base class of existing derivated class
目前我正在编写一个应用程序,该应用程序将液位测量数据显示在一些图中。我总是在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派生,而不是从QwtPlotPixer派生?当然,我也可以编辑Qwt来源,但必须有一个合适的方法。
我希望有一个合适的方法来做这件事。如果有人能帮我,我会很高兴的。
尝试多重继承:
class myQwtPlotZoomer : public QwtPlotZoomer, public QwtPlotPicker { };
在C++中,没有办法在运行时更改类层次结构。
我想您应该重新考虑您的设计——您不能也不应该更改某些库类的继承层次结构。
你有没有看一些例子,看看你提到的类是如何使用的?也许你应该问一个新问题,以了解如何解决你实际面临的问题(即,如果我理解正确,如何在qwt中创建可缩放的绘图)
您必须重载QwtPlotZoomer重新实现trackerTextF()。如果你也有一个独立的QwtPlotPicker的用例——不是QwtPlotZoomer——你必须做两次:
class YourPicker:公共QwtPlotPicker。。。class YourZoomer:公共QwtPlotZoomer。。。
由于您的实现是一个单行,我认为写两次它没有问题,但如果您想避免这种情况,您必须将代码放在其他类中,这在两个重载方法中都被调用。
- 指向基类派生类的 std::unique_ptr 的指针
- 从多个模板化基类派生时出现"隐藏重载的虚函数"警告
- 从模板基类派生是否在派生类声明的点实例化模板
- 使从一个基类派生的类能够使用继承的受保护成员
- C++多态性访问基类派生类字段
- C++派生类的设置属性到从同一基类派生的未知类对象
- 使用void* 参数定义纯虚函数的抽象基类.派生类匹配参数是指向某种类型的指针
- 在C++中,如何使用将保存从基类派生的任何对象的类成员
- 如何测试从依赖于外部系统的外部基类派生的类
- 如何从模板基类派生非模板类
- 在派生类中使用声明并不能隐藏从基类派生的相同函数
- 从具有静态结构的基类派生
- 具有从 c++ 中的非模板基类派生的模板类的事件系统
- C++ 调用从基类派生的覆盖函数
- 不清楚如何在从抽象基类派生的类中实现运算符重载
- 如何正向声明从正向声明的模板基类派生的类
- 是否可以从 std::enable_shared_from_this 和抽象基类派生
- 多态性c++,试图访问从抽象基类派生的类的成员函数
- C++多重继承,基类派生自同一类
- 基类派生类访问-如何