Qt
のGUIプロジェクトには、QWidget
から直接継承する多くの「構成ページ」クラスがあります。
最近、これらすべてのクラスが2つの共通スロット(loadSettings()
とsaveSettings()
)を共有していることに気付きました。
これに関して、2つの質問があります。
BaseConfigurationPage
と名付けます)を記述するのは理にかなっていますか? (可能なすべての構成ページ常にこれら2つの方法があるため、「はい」と言います)すべてを説明するコード例は次のとおりです。
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 ++純粋仮想メソッドと同様に、メソッドに実装が与えられるまで、クラスをインスタンス化することはできません。
1つ:サブクラスでは、オーバーライドされたメソッドを実際にスロットとしてマークする必要はありません。まず、これらは基本クラスのスロットとして既に実装されています。第二に、あなたは(ごく)もう少しコードを追加しているので、MOCとコンパイラのためにより多くの作業を作成しているだけです。些細ですが、何でも。
どうぞ。
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();
};