如何在QT Creator上将QWidget声明为继承类的对象
How to declare a QWidget as object of an inherited class on QT Creator?
我有一个从QComboBox
继承的MyComboBox类,以便覆盖方法focusOutEvent
:
- mymbobox.h
li>mymbobox.cppclass MyComboBox : public QComboBox { public: MyComboBox(); protected: void focusOutEvent(QFocusEvent * e) override; };
#include "mycombobox.h" MyComboBox::MyComboBox() { } void MyComboBox::focusOutEvent(QFocusEvent * e) { // I will code here qDebug()<<"Object has lost focus"; MyComboBox::focusOutEvent(e); }
但我不知道如何将comboBox声明为MyComboBox类的对象,并且在MainWindow构造函数上使用以下内容在MyComboBox和QComboBox之间具有不兼容的类型:
MyComboBox* oMyComboBox; oMyComboBox = ui->comboBox;
UI上的实例必须具有MyComboBox类型。这取决于对象创建过程中的类型。例如,如果你做了这样的事情:
QComboBox* comboBox; // This was declared on UI
ui->comboBox = new MyComboBox();
因此您可以将此实例用作带有qobject_cast:的MyComboBox
QComboBox *oMyComboBox = qobject_cast<MyComboBox *>(ui->comboBox);
不能将基类的实例分配给具有继承者类型的变量。所有被覆盖的虚拟成员会发生什么?因此,您的操作方式不符合OOP原则。也许,您可以始终将指针强制转换为其继承者类,但在访问类成员时会出现运行时错误,除非您要强制转换的指针是作为继承者的实例创建的。
您必须手动创建类的实例,正如alexb建议的那样:ui->comboBox = new MyComboBox;
。你不需要使用任何铸造。focusOutEvent((是一个虚拟方法,将在MyComboBox的任何实例中调用,即使变量来自QComboBox。多态性!
坏消息是:
- 在实例化
MyComboBox
之前,首先需要delete ui->comboBox
,否则放置在设计器中的组合框将在表单中保留为子组合框 - 实例化你的CCD_ 6并将其分配给CCD_;原始的";combobox。并且将不具有信号->插槽连接。你需要自己做
相关文章:
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 使用智能指针附加的继承对象的深层复制
- 虚拟类继承对象大小问题
- 基对象和继承对象,用于将标准变量包装在C++中
- 为什么私有继承对象允许成员函数将派生的*转换为基*,而外部不能
- 是否有一种方法可以专门使用继承对象的一般方法
- 如何将接口对象强制转换为特定的继承对象
- MFC C++ 无法在动态创建的 CButton 继承对象上设置映像
- 在容器中存储多个继承对象
- QObject基类到继承对象的C++类型转换
- C++ 中的继承对象和属性丢失
- 继承对象列表 - C++
- 静态分配继承对象的数组
- 正确实例化双重继承对象
- 我是否需要使用继承对象(相对于基对象)覆盖我的虚函数?
- c++继承.对象调用超类方法而不是自己的方法
- 基对象和继承对象的向量
- 将多继承对象转换为void*或从void*转换为多继承对象
- 如何在c++中表示继承对象的树?
- 继承对象上指针算术的安全性