我在 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/