在许多情况下,我想覆盖Qt类来扩展或修改它的行为.但是几乎所有Qt类都使用QNetworkDiskCache中的内部私有类,如QNetworkDiskCachePrivate.我知道这种方法有优点.但私人阶层存在一个巨大的问题:它使得超越班级变得更加困难.对于带有源代码的其他C++类库,我通常会覆盖一个类方法,从父类的实现中复制代码,并在此处进行小的修改以实现我想要的行为.但是,在Qt中,私有类不会导出,并且对派生类不可见.由于Qt类通过"d"成员维护私有类中的关键内部数据,因此私有内部类的不可见性使得行为扩展的可能性非常有限.您只能使用少数暴露的公共方法.
我尝试提取类的整个源文件并重命名类名和文件名.但Qt类库交织在一起,以至于在大多数情况下从中提取单个类也很混乱.
我在这里想念一下吗?或者Qt类在可扩展性方面真的很糟糕?
Alb*_*rto -2
你的做法是错误的、糟糕的!要扩展 Qt 以及更一般的 C++ 代码,您不必复制源代码并在需要的地方进行修改。您应该(必须)使用扩展 OOP(面向对象编程)范例。在 C++ 中你应该这样写:
#include <iostream>
using namespace std;
class A
{
public:
A(){x=1;}
void writeName(){cout << "my name is A";}
void writeNumber(){cout << "my number is " << x << endl;}
private:
int x;
};
class B : public A
{
public:
B(){}
void writeName(){cout << "my name is B and i'm better then A" << endl;}
};
int main()
{
B *b= new B();
b->writeName();
b->writeNumber();
return 0;
}
//output:
my name is B and i'm better then A
my number is 1
Run Code Online (Sandbox Code Playgroud)
通过这种方式,B 可以完成基类 A 所做的所有工作,并且您可以添加方法(扩展基类)来满足您的需求。如果您查看 qt 示例代码,这通常是用于执行未包含在默认 qt 小部件行为中的操作的方法。在示例 ItemDelegate 自定义中:您编写自己的类 MyItemDelegate 来扩展 QItemDelegate:链接
或者 Qt 类在可扩展性方面真的很糟糕?
Qt“只是”一个构建C++语言的框架。这意味着您可以在 C++ 中完成的所有操作都可以使用 Qt 完成。