c++ - Qt 是否支持虚拟纯插槽?

标签 c++ qt inheritance signals-slots

我在 Qt 中的 GUI 项目有很多“配置页面”类,它们都直接继承自 QWidget

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

关于这个,我有两个问题:

  • 用这两个插槽作为虚拟纯方法编写一个中间基础抽象类(我们将其命名为 BaseConfigurationPage)有意义吗? (每个可能的配置页面总是有这两种方法,所以我会说"is")
  • 在我对代码进行重大更改之前(如果必须):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 和编译器创建更多工作,因为您添加了(微小的)更多代码。微不足道,但无论如何。

所以,去吧..

关于c++ - Qt 是否支持虚拟纯插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998216/

相关文章:

c++ - gen~ phasor() 是做什么的? (将 Max/MSP gen 转换为 C++)

python - qtreewidget 不需要的空白(额外的不可删除的行)

c++ - 错误 LNK2019 : unresolved external symbol "public: __thiscall Signal

qt - QML 矩形 : Detected anchors on an item that is managed by a layout. 这是未定义的行为;使用 Layout.alignment 代替

javascript - 为什么 util.inherits 创建一个继承自 super 构造函数原型(prototype)的新对象?

java - 将多个继承对象添加到容器类中

c++ - Cygwin-打开命名的fifo时导致阻塞,导致另一个线程在打开常规文件时阻塞

C++ 提取 istream 的内容并复制到另一个

c++ - 在 header 中使用 & 将变量传递给函数

python - QPushButton 不显示