Qt是否支持虚拟纯插槽?

我在Qt中的GUI项目有很多“configuration页面”类,它们都直接从QWidgetinheritance。

最近,我意识到所有这些类共享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(); };