110 votes

Qt prend-il en charge les machines à sous virtuelles pures?

Mon GUI projet en Qt a beaucoup de "pages de configuration" toutes les classes qui héritent directement à partir de QWidget.

Récemment, j'ai réalisé que toutes ces classes se partagent 2 communes de fentes (loadSettings() et saveSettings()).

À ce sujet, j'ai deux questions:

  • Est-il judicieux d'écrire un intermédiaire de la base de la classe abstraite (permet de nom c' BaseConfigurationPage) avec ces deux machines à sous virtuelle pure méthodes ? (Toutes les configurations possibles de la page sera toujours avoir ces deux méthodes, donc je dirais "oui")
  • Avant de me faire le gros changement dans mon code (si j'ai) : Qt virtuel de soutien de pures machines à sous ? Est-ce que je devrais être au courant ?

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();
};

176voto

ianmac45 Points 1077

Oui, exactement comme en c++ méthodes virtuelles pures. Le code généré par le MOC appelle la virtuelle pure fentes, mais c'est ok depuis la classe de base ne peut pas être instanciée de toute façon...

Encore une fois, exactement comme en c++ méthodes virtuelles pures, la classe ne peut pas être instancié jusqu'à ce que les méthodes qui permettent une mise en œuvre.

Une chose: dans la sous-classe, vous actuallly n'avez pas besoin de marquer le remplacé les méthodes que les machines à sous. Un, ils sont déjà mis en œuvre en tant que logements dans la classe de base. Deux, vous êtes juste de créer plus de travail pour le MOC et le compilateur puisque vous êtes l'ajout d'un (petit) peu plus de code. Trivial, mais peu importe.

Donc, allez-y..

2voto

lygstate Points 56

Uniquement 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();
};
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X