在Qt中的两种形式之间传递值
我有一个名为在Qt中的两种形式之间传递值,qt,Qt,我有一个名为MainWindow的lineEdit表单,名为myVal。在第二个名为SecondWindow的表单中,我有一个名为myVal2的lineEdit和一个名为OKButton的Ok按钮 我认为最好的解决方案是使用信号和插槽。我搜索了不同的网站,但我试图使用。 connect(ui.ok按钮、信号(clicked())、主窗口、插槽(transferValue)) 但是,我无法让它工作。最佳解决方案取决于第二个窗口的性质 如果您的第二个窗口是一个非模态对话框,那么信号和插槽将是最佳选择
MainWindow
的lineEdit
表单,名为myVal
。在第二个名为SecondWindow
的表单中,我有一个名为myVal2
的lineEdit
和一个名为OKButton
的Ok按钮
我认为最好的解决方案是使用信号和插槽。我搜索了不同的网站,但我试图使用。
connect(ui.ok按钮、信号(clicked())、主窗口、插槽(transferValue))代码>
但是,我无法让它工作。最佳解决方案取决于第二个窗口的性质
如果您的第二个窗口是一个非模态对话框,那么信号和插槽将是最佳选择。将OK按钮的clicked()
信号连接到主窗口实现的插槽。在插槽中,读取第二个窗口中的行编辑值,并将其复制到主窗口中的行编辑
如果您的第二个窗口是一个模态对话框,那么您实际上不需要信号和插槽。您应该使用QDialog
派生类,并通过调用exec()
来显示它。当此函数返回时,返回值指示用户单击了“确定”还是“取消”。根据此值,您可以决定是否复制行编辑值。最佳解决方案取决于第二个窗口的性质
如果您的第二个窗口是一个非模态对话框,那么信号和插槽将是最佳选择。将OK按钮的clicked()
信号连接到主窗口实现的插槽。在插槽中,读取第二个窗口中的行编辑值,并将其复制到主窗口中的行编辑
如果您的第二个窗口是一个模态对话框,那么您实际上不需要信号和插槽。您应该使用QDialog
派生类,并通过调用exec()
来显示它。当此函数返回时,返回值指示用户单击了“确定”还是“取消”。基于这个值,,您可以决定是否应该复制行编辑值。我会防御性地重写SecondWindow的构造函数并将其作为参数传递给MainWindow的实例,然后您可以无约束地访问类MainWindow的公共变量。我会防御性地重写SecondWindow的构造函数并传递作为MainWindow的一个实例,您可以无约束地访问MainWindow类的公共变量。在我看来,您的第二个窗口应该是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();
}
在我看来,第二个窗口不需要知道主窗口及其内部结构,第二个窗口应该是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();
}
您的第二个窗口不需要知道主窗口及其内部我已经在下面的回答中概述了您的一般方法。如果您在信号和插槽方面遇到问题,请务必更新您的问题,或者发表评论,传达任何特定的错误信息。我已经在下面的回答中概述了您的一般方法。如果您在信号和插槽方面遇到问题,请务必更新您的问题,或者发布一条评论,传达任何特定的错误消息。