免责声明:此描述包含许多Qt细节。他们不是必须回答的问题,我只是想为您提供背景。
我需要在反应focusInEvent
的QTextEdit
。不幸的是,这不能作为信号,这就是为什么我需要subclass的原因QTextEdit
。由于这是我唯一需要的更改,因此我想使用一个匿名子类
像这样:
myTextEdit =new QTextEdit(){
void focusInEvent(){
//code here
}
};
这是我要用Java编写的代码,它不能在c ++中编译。以下所有代码都在custom的构造函数中QWidget
。将QTextEdit
被包含在这个小部件,并应在其构造函数初始化。
奇怪的是,此代码编译:
class MyTextEdit:protected QTextEdit{
void focusInEvent();
};
auto myTextEdit=new MyTextEdit();
但没有用,因为我无法将的实例分配myTextEdit*
给的指针QTextEdit
。多态性以某种方式失败了。此代码无法编译:
class MyTextEdit:protected QTextEdit{
void focusInEvent();
};
QTextEdit* myTextEdit=new MyTextEdit();
编译器错误是:
/home/lars/ProgrammierPraktikum/moleculator/implementation/Moleculator/gui_elements/editor.cpp:40:错误:“ QTextEdit”是“ Editor :: Editor(std :: shared_ptr):: MyTextEdit'QTextEdit *的不可访问基础新的MyTextEdit();
实际问题:
如何创建与其父类的指针兼容的匿名子类?
您的子类化尝试
class MyTextEdit:protected QTextEdit{
void focusInEvent();
};
QTextEdit* myTextEdit=new MyTextEdit();
几乎可以。
仅仅因为该方法是受保护的,并不意味着您应该继承protected。
您需要常规的公共继承。
class MyTextEdit:public QTextEdit{
void focusInEvent();
};
QTextEdit* myTextEdit=new MyTextEdit();
现在您说的是MyTextEdit替代QTextEdit。您可能想要添加一个构造函数,以将父窗口小部件提供给MyTextEdit。
在c ++中,没有像Java一样的匿名内部类这样的东西。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句