2016-10-08 5 views
0

Bitte beachten Sie: a C++ qt hier Neuling,QT Passing Parameter QDialog Anforderungen

ich sanft eine extrem hilfreich post Informationen und zu einem QDialog senden über, aber ich habe eine Sorge in Bezug auf meine eigene Implementierung.

Say hat man eine benutzerdefinierte QDialog = LoginStatusDialog Sprechen Sie eine QString username, password-LoginStatusDialog über den Konstruktor durch wie abgebildet passieren muss mein loginstatusdialog.h

class LoginStatusDialog : public QDialog 
{ 
    Q_OBJECT 

public: 
// explicit LoginStatusDialog(QWidget *parent = 0); <<< --- ORIGINAL constuctor before adding parameters 
    explicit LoginStatusDialog(QWidget *parent = 0, const QString &_login = NULL, const QString &_key = NULL); 
... 

private: 
    Ui::LoginStatusDialog *ui; 
    QString login, key; 
}; 

Hier bin ich verpflichtet zu 2 2 Änderungen implementieren, dass die genannten Post fehlt:

1. `const` : I am required to define the parameter as a constant 

2. `= NULL` : I am required to add a default value 

Warum sind beide erforderlich, wo die Post diese fehlen oder wurden sie nur als gegeben vernachlässigt?

Antwort

0

Zunächst einmal müssen Sie Sie Konstruktor wie folgt ändern:

LoginStatusDialog(const QString &_login, const QString &_key, QWidget *parent = 0); 

Damit Sie die Standardwerte auf Ihre Parameter angeben vermeiden. Außerdem brauchen Sie den Konstruktor declare nicht als explicit. Es ist nur für Konstruktoren mit nur einem Parameter sinnvoll, um implizites Typ-Casting zu vermeiden.

Zweitens bedeutet const QString &, dass Sie den Wert per Referenz an die Methode senden. Damit vermeiden Sie zusätzliche Datenkopien. Sie müssen dies nicht tun. Sie können Parameter genau wie QString login deklarieren, aber dies ist keine gute Übung. Weitere Informationen finden Sie unter this article.