Mon projet GUI dans Qt
a beaucoup de classes de "pages de configuration" qui héritent toutes directement de QWidget
.
Récemment, j'ai réalisé que toutes ces classes partagent 2 emplacements communs (loadSettings()
et saveSettings()
).
À ce sujet, j'ai deux questions:
BaseConfigurationPage
) avec ces deux emplacements en tant que méthodes virtuelles pures? (Toutes les pages de configuration possibles toujours ont ces deux méthodes, donc je dirais "oui")Voici un exemple de code décrivant tout:
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();
};
Oui, tout comme les méthodes virtuelles pures c ++ normales. Le code généré par MOC appelle les emplacements virtuels purs, mais ça va puisque la classe de base ne peut pas être instanciée de toute façon ...
Encore une fois, tout comme les méthodes virtuelles pures c ++ normales, la classe ne peut pas être instanciée jusqu'à ce que les méthodes reçoivent une implémentation.
Une chose: dans la sous-classe, vous n'avez en fait pas besoin de marquer les méthodes remplacées comme des emplacements. Tout d'abord, ils sont déjà implémentés en tant que slots dans la classe de base. Deuxièmement, vous créez simplement plus de travail pour le MOC et le compilateur puisque vous ajoutez un (petit) peu plus de code. Trivial, mais peu importe.
Alors, allez-y ..
Seuls les emplacements dans la 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();
};