gpt4 book ai didi

java - C++:为事件处理程序创建一个匿名类

转载 作者:行者123 更新时间:2023-11-30 03:49:17 24 4
gpt4 key购买 nike

免责声明:此说明包含大量 Qt 细节。他们没有必要回答这个问题,我只是想给你介绍一下背景。

我需要对 QTextEditfocusInEvent 使用react。不幸的是,这不能用作信号,这就是为什么我需要子类化 QTextEdit。因为这是我唯一需要的改变,所以我想使用匿名子类

像这样:

myTextEdit =new QTextEdit(){
void focusInEvent(){
//code here
}
};

这是我会用 Java 编写的代码,它不能用 C++ 编译。以下所有代码都在自定义 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: error: 'QTextEdit' is an inaccessible base of 'Editor::Editor(std::shared_ptr)::MyTextEdit' QTextEdit* myTextEdit=new MyTextEdit();

实际问题:

如何创建与其父类(super class)的指针兼容的匿名子类?

最佳答案

你的子类化尝试

class MyTextEdit:protected QTextEdit{
void focusInEvent();
};
QTextEdit* myTextEdit=new MyTextEdit();

差不多就好了。

仅仅因为该方法是 protected 并不意味着您应该继承 protected 。

  • 一个 protected 方法说:这不是我的界面的一部分。除了我,没有人可以这样调用它。我将自己调用它(作为事件处理的一部分)。该方法可以在子类中被覆盖。
  • Inheriting protected 说:没有人应该知道这个继承,它是一个实现细节,可能对扩展我的类有用。

您需要常规的公共(public)继承。

class MyTextEdit:public QTextEdit{
void focusInEvent();
};
QTextEdit* myTextEdit=new MyTextEdit();

现在您说 MyTextEdit 是 QTextEdit 的替代品。您可能想要添加一个构造函数来为 MyTextEdit 提供父窗口小部件。

在c++中没有类似java的匿名内部类。

关于java - C++:为事件处理程序创建一个匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32648234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com