【问题标题】:QDialog on accept return custom class object接受返回自定义类对象的QDialog
【发布时间】:2014-01-11 18:36:36
【问题描述】:

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

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

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

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

QDialog -> 好的 -> QMainWindow

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

【问题讨论】:

  • 一年后这个问题还没有解决吗??

标签: c++ qt qtgui qmainwindow qdialog


【解决方案1】:

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

在我看来,最好是自定义 QDialog 子类,其中包含三个 QLabels 和 3 个 QLineEdits。

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

  • 标签 1:名称

  • 标签 2:手机号码

  • 标签 3:电子邮件

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

然后,就像您的程序可能已经做的那样,分别处理“接受”事件。您可以使用以下方法来检索最终用户输入的文本:

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)在 QDialog 我有标签和行编辑。 2)在按钮接受的处理程序中,我从对话框中获取 QStrings 问题是如何将 3 个值返回给主窗口,因为打开对话框的主窗口的动作触发方法在显示对话框后立即结束。
  • @user1638466:这取决于您希望如何处理这些值。您可以将它们存储在成员变量中,以后可以从对话框本身访问它,而无需破坏它,只是隐藏或将其分配给主窗口或应用程序的另一个组件等。您问的问题太宽泛了。 :)
  • 好吧我知道...事实上我也在尝试在 QT 论坛上获得一些帮助,我希望能解决这个问题,我也会在这里发布解决方案 ;)
  • @user1638466:解决方案已经针对恕我直言的问题发布。对于不在问题中的问题,我不会发布答案。
  • @user1638466:您原来的问题还有什么要解决的吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-11-01
    • 2016-09-02
    • 1970-01-01
    • 2019-11-15
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多