2016-10-08 7 views
0

Пожалуйста, обратите внимание: C++ Qt новичок здесь, быть нежнымQT параметр Passing требованиям QDialog

Я нашел очень полезный post относительно передачи информации в QDialog, но у меня есть беспокойство по поводу моей собственной реализации.

Say один имеет обычай QDialog = LoginStatusDialog Say нужно пройти QString username, password в LoginStatusDialog через его конструктор, как показано на мой 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; 
}; 

Здесь я обязан 2 осуществить 2 изменений, что упомянутый пост не хватает:

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

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

Почему они оба требуются, где сообщение не хватает этих или они просто игнорировались как заданные?

ответ

0

Прежде всего, вам нужно изменить вам конструктор, как это:

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

С этим вы избежите добавления значения по умолчанию для ваших параметров. Также вам не нужно объявлять конструктор как explicit. Это делается только для конструкторов с одним параметром, чтобы избежать неявного литья типов.

Во-вторых, const QString & означает, что вы отправляете значение методу по ссылке. При этом вы избегаете дополнительной копии данных. Вы не обязаны это делать. Вы можете объявить параметр точно так же, как QString login, но сделать так, чтобы не было хорошей практики. Для получения дополнительной информации см. this article.