在Qt中在两个表单之间传输值

时间:2012-11-08 01:55:20

标签: qt


我在名为lineEdit的表单中有一个名为myVal的{​​{1}}。在名为MainWindow的第二种表单中,我有一个名为SecondWindow的{​​{1}}和一个名为lineEdit的确定按钮。

我认为最好的解决方案是使用信号和插槽。我搜索了不同的网站,但我试图使用。 myVal2

然而,我无法让它发挥作用。

3 个答案:

答案 0 :(得分:2)

在我看来,你的第二个窗口应该是QDialog的子类,如上所述。

然后,如果要检索LineEdit值,只需提供一个访问者:

class MyDialog : public QDialog {
public:
    QString myVal() const { return ui->lineEdit->text(); }
};

要显示对话框,请使用exec并检查返回值:

MyDialog dialog;
if (dialog.exec() == QDialog::Accepted) { /* The user clicked Ok */ 
    const QString val = dialog.myVal();
}

您的第二个窗口无需了解您的MainWindow及其内部

答案 1 :(得分:0)

最佳解决方案取决于第二个窗口的性质。

如果您的第二个窗口是无模式对话框,那么信号和插槽就是最佳选择。将OK按钮的clicked()信号连接到主窗口实现的插槽。在插槽内,在第二个窗口中读取行编辑的值,然后将其复制到主窗口中的行编辑。

如果你的第二个窗口是模态对话框,那么你真的不需要信号和插槽。您应该使用QDialog派生类,并使用对exec()的调用来显示它。当此函数返回时,返回值指示用户是单击“确定”还是“取消”。根据此值,您可以决定是否应该复制行编辑值。

答案 2 :(得分:-1)

我会彻底覆盖SecondWindow的构造函数,并将作为参数传递给MainWindow的实例,然后您可以不受约束地访问类MainWindow的公共变量。