接受返回自定义类对象的QDialog

时间:2014-01-11 18:36:37

标签: c++ qt qtgui qmainwindow qdialog

我正在使用qt-creator构建一个小型QT应用程序。

我有一个主窗口,我有一些控件,如“新联系人”按钮。 按下按钮显示QDialog,它包含3行编辑:姓名,手机和电子邮件。

通过Signal / Slot系统显示对话框。它工作正常但我想在单击OK时创建一个Contact对象,我想将该Contact返回到我的主窗口,以便将它放入在主窗口代码中创建的QList中。

方法是:  QMainWindow - >新联系 - >显示QDialog

QDialog - >好的 - > QMainWindow

我应该将QList从主窗口传递给QDialog作为参数还是有最好的方法?

2 个答案:

答案 0 :(得分:0)

  

我应该将QList从主窗口传递给QDialog作为参数还是有最好的方法?

在我看来,最好的是自定义QDialog子类,其中包含三个QLabel和3个QLineEdit s。

标签会获得以下类型的值:

  • 标签1:名称

  • 标签2:mobileNumber

  • 标签3:电子邮件

您可以使用QLabel和QLineEdits来显示来自用户的输入。

然后,正如你的程序可能已经做的那样,只需分别处理“accept”事件。您可以使用以下方法检索最终用户输入的文本:

  

text : QString

     

此属性包含行编辑的文本。

     

设置此属性将清除选择,清除撤消/重做历史记录,将光标移动到行尾并将修改后的属性重置为false。使用setText()插入时,不验证文本。

     

文本被截断为maxLength()长度。

     

默认情况下,此属性包含空字符串。

然后,在accepted signal的处理程序中,您可以调用三种访问器方法,例如:

  • QString name()const {return nameLineEdit-> text(); }

  • QString mobileNumber()const {return mobileNumberLineEdit-> text(); }

  • QString email()const {return emailLineEdit-> text(); }

您还可以将其存储在专用结构中,具体取决于您构建数据表示形式,因此结构将如下所示:

struct Contact {
    QString name;
    QString mobileNumber;
    QString email;
};

然后你将拥有如下的访问者

Contact contact() const;

答案 1 :(得分:0)

创建QDialog的子类。调用Yourclass :: exec()来显示对话框(exec是QDialog中的函数),然后调用Yourclass :: contactDetails()来获取它们。 contactDetails是一个非常普通的成员函数,你必须写。