Qt是否支持虚拟纯插槽?
我在Qt
中的GUI项目有很多“configuration页面”类,它们都直接从QWidget
inheritance。
最近,我意识到所有这些类共享2个公共时隙( loadSettings()
和saveSettings()
)。
对此,我有两个问题:
- 用这两个插槽编写一个中间基本抽象类(让它命名为
BaseConfigurationPage
)是否是有意义的虚拟纯方法? (每个可能的configuration页面将总是有这两个方法,所以我会说“是”) - 在我做我的代码的重大变化之前(如果我必须):Qt是否支持虚拟纯插槽? 有什么我应该知道的?
这是一个描述一切的代码示例:
class BaseConfigurationPage : public QWidget { // Some constructor and other methods, irrelevant here. public slots: virtual void loadSettings() = 0; virtual void saveSettings() = 0; }; class GeneralConfigurationPage : public BaseConfigurationPage { // Some constructor and other methods, irrelevant here. public slots: void loadSettings(); void saveSettings(); };
是的,就像常规的c ++纯虚拟方法一样。 由MOC生成的代码确实会调用纯虚拟插槽,但没关系,因为基类无法实例化。
同样,就像常规的c ++纯虚拟方法一样,只有在方法被赋予实现之后,类才能被实例化。
有一件事:在子类中,实际上并不需要将重写方法标记为插槽。 一,它们已经作为基类中的插槽来实现。 二,你只是为MOC和编译器创build更多的工作,因为你正在添加一个(微小的)多一点的代码。 琐碎,但无论如何。
所以,去吧..
只有BaseConfigurationPage中的插槽
class BaseConfigurationPage : public QWidget { // Some constructor and other methods, irrelevant here. public slots: virtual void loadSettings() = 0; virtual void saveSettings() = 0; }; class GeneralConfigurationPage : public BaseConfigurationPage { // Some constructor and other methods, irrelevant here. void loadSettings(); void saveSettings(); };