Qt是否支持虚拟纯插槽?

ere*_*eOn 94 c++ inheritance qt signals-slots

我的GUI项目Qt有很多"配置页面"类,它们都直接从中继承QWidget.

最近,我意识到所有这些类共享2个公共插槽(loadSettings()saveSettings()).

对此,我有两个问题:

  • BaseConfigurationPage用这两个插槽作为虚拟纯方法编写一个中间基本抽象类(让它命名)是否有意义?(每个可能的配置页面总是有这两种方法,所以我会说"是")
  • 在我对代码进行大量更改之前(如果必须):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();
};
Run Code Online (Sandbox Code Playgroud)

ian*_*c45 155

是的,就像常规的c ++纯虚方法一样.MOC生成的代码确实调用了纯虚拟插槽,但是没关系,因为基类无论如何都无法实例化......

同样,就像常规的c ++纯虚方法一样,在给出实现方法之前,不能实例化类.

一件事:在子类中,您实际上不需要将重写方法标记为插槽.首先,它们已经实现为基类中的插槽.其次,您只是为MOC和编译器创建了更多的工作,因为您要添加(微小)更多的代码.琐碎,但无论如何.

所以,去吧..

  • +1为你的"一件事".很高兴知道. (15认同)
  • 从子类中删除槽规范可以防止moc调用子类AND基类!- 谢啦! (3认同)