当前位置: 首页 > 面试题库 >

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

子车青青
2023-03-14
问题内容

免责声明: 此描述包含许多Qt细节。他们不是必须回答的问题,我只是想为您提供背景。

我需要在反应focusInEventQTextEdit。不幸的是,这不能作为信号,这就是为什么我需要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一样的匿名内部类这样的东西。



 类似资料:
  • 我正在使用我继承的大型应用程序,并且遇到了一些最佳实践问题。 每次用户导航到我们的客户编辑页面时,都会创建一个新的演示者,并设置一个视图。客户编辑有一个主演示者和一个主视图。主视图中还有主演示者的子演示者使用的子视图。在子演示者中,我在事件总线上注册事件处理程序。 我遇到的问题是,当a第二次导航到联系人编辑器时,会再次创建演示者,并再次注册这些事件。现在,当一个事件发生时,它会被处理两次,每个演示

  • 本文向大家介绍C#Lambda表达式作为事件处理程序,包括了C#Lambda表达式作为事件处理程序的使用技巧和注意事项,需要的朋友参考一下 示例 Lambda表达式可用于处理事件,在以下情况下非常有用: 处理程序很短。 处理程序永远不需要取消订阅。 下面给出了一个可能使用lambda事件处理程序的良好情况: 如果有必要在代码的某个将来点取消订阅已注册的事件处理程序,则应将事件处理程序表达式保存到一

  • 本文向大家介绍轻松创建nodejs服务器(5):事件处理程序,包括了轻松创建nodejs服务器(5):事件处理程序的使用技巧和注意事项,需要的朋友参考一下 为了对不同请做出不同的反馈,我们引入一个事件处理器的模块。 该模块命名为 requestHandlers,我们先添加start() 和 upload()两个占位函数。 requestHandlers.js 代码如下: 在真实的应用中,请求处理程

  • 问题内容: 我有一个LoginForm组件。我要检查之前提交,这两个和设置。我尝试使用此代码(省略了很多内容): 但是,我在事件处理程序中得到一个,说是空的。 我该怎么办? 问题答案: 你需要设置的方法,因为现在是,对于此操作,您可以使用 或者您可以使用箭头功能

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 本文向大家介绍C#程序创建一个简单线程,包括了C#程序创建一个简单线程的使用技巧和注意事项,需要的朋友参考一下 为了创建线程,我创建了一个函数- 调用上述函数以创建线程,并创建一个新的ThreadStart委托- 示例 使用以下代码创建一个简单的线程。 输出结果