【问题标题】:QT Passing parameter to QDialog requirementsQT 将参数传递给 QDialog 要求
【发布时间】:2016-10-08 11:32:03
【问题描述】:

请注意:这里是一个 c++ qt 新手,要温柔

我发现了一个非常有用的 post,关于向 QDialog 发送信息,但我对自己的实现有所顾虑。

说有一个自定义QDialog = LoginStatusDialog 假设需要通过其构造函数将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

为什么这两个都是必需的,帖子缺少这些,或者它们只是被忽略了?

【问题讨论】:

    标签: c++ qt constructor qdialog


    【解决方案1】:

    首先你需要像这样改变你的构造函数:

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

    这样可以避免向参数添加默认值。您也不需要将构造函数声明为explicit。它只对只有一个参数的构造函数有意义,以避免隐式类型转换。

    其次,const QString &amp; 表示您通过引用向方法发送值。这样可以避免额外的数据复制。您不需要这样做。您可以像QString login 一样声明参数,但这样做不是一个好习惯。更多信息请参考this article

    【讨论】: