accept上的QDialog返回自定义类对象

QDialog on accept return custom class object

本文关键字:对象 自定义 返回 上的 QDialog accept      更新时间:2023-10-16

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

我有一个主窗口,在那里我有一些控件,比如"新联系人"按钮。按下按钮,会显示一个Q对话框,其中包含3行编辑:姓名、手机和电子邮件。

该对话框通过信号/插槽系统显示。它工作得很好,但我想在单击"确定"时创建一个Contact对象,并且我想将该Contact返回到我的主窗口,以便将其放入在主窗口代码中创建的QList中。

方法是:QMainWindow->新联系人->显示的Q对话框

Q对话框->确定->Q主窗口

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

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

在我看来,最好是一个带有三个QLabel和三个QLineEdits的自定义QDialog子类。

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

  • 标签1:名称

  • 标签2:手机号码

  • 标签3:电子邮件

您将使用QLabels和QLineEdits来显示它们以及来自用户的输入。

然后,正如您的程序可能已经做的那样,只需处理";接受";事件。您可以使用以下方法来检索最终用户输入的文本:

text:QString

此属性保存行编辑的文本。

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

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

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

然后,在接受信号的处理程序中,您可以调用三个访问器方法,如:

  • 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;

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