免责声明: 此描述包含许多Qt细节。他们不是必须回答的问题,我只是想为您提供背景。
我需要在反应focusInEvent的QTextEdit。不幸的是,这不能作为信号,这就是为什么我需要subclass的原因QTextEdit。由于这是我唯一需要的更改,因此我想使用一个匿名子类
focusInEvent
QTextEdit
像这样:
myTextEdit =new QTextEdit(){ void focusInEvent(){ //code here } };
这是我要用Java编写的代码,不能在c ++中编译。以下所有代码都在custom的构造函数中QWidget。将QTextEdit被包含在这个小部件,并应在其构造函数初始化。
QWidget
奇怪的是,此代码编译:
class MyTextEdit:protected QTextEdit{ void focusInEvent(); }; auto myTextEdit=new MyTextEdit();
但没有用,因为我无法将的实例分配myTextEdit*给的指针QTextEdit。多态性以某种方式失败了。该代码无法编译:
myTextEdit*
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();
实际问题:
如何创建与其父类的指针兼容的匿名子类?
您的子类化尝试
几乎可以。
仅仅因为该方法是受保护的并不意味着您应该继承protected。
您需要常规的公共继承。
class MyTextEdit:public QTextEdit{ void focusInEvent(); }; QTextEdit* myTextEdit=new MyTextEdit();
现在您说的是MyTextEdit替代QTextEdit。您可能想要添加一个构造函数,以将父窗口小部件提供给MyTextEdit。
在c ++中,没有像Java一样的匿名内部类这样的东西。