在很多情况下,我想重写一个 Qt 类来扩展或修改它的行为。但几乎所有的 Qt 类都使用内部私有类,例如 QNetworkDiskCache 内部的 QNetworkDiskCachePrivate。我知道这种方法有一些优点。但是私有类有一个巨大的问题:它使覆盖类变得更加困难。对于其他带有源代码的 C++ 类库,我通常会重写一个类方法,从父类的实现中复制代码,并在这里和那里进行一些小的修改以实现我想要的行为。但是,在 Qt 中,私有类不会被导出并且对派生类不可见。由于 Qt 类通过“d”成员在私有类中维护关键的内部数据,私有内部类的不可见性使得行为扩展的可能性非常有限。您只能使用少数公开的公共方法。
我尝试提取类的整个源文件并重命名类名和文件名。但是 Qt 类库如此紧密地交织在一起,以至于在大多数情况下,从中提取一个类也很麻烦。
我在这里想念什么吗?或者 Qt 类在可扩展性方面真的很糟糕?