我在名为lineEdit
的表单中有一个名为myVal
的{{1}}。在名为MainWindow
的第二种表单中,我有一个名为SecondWindow
的{{1}}和一个名为lineEdit
的确定按钮。
我认为最好的解决方案是使用信号和插槽。我搜索了不同的网站,但我试图使用。
myVal2
然而,我无法让它发挥作用。
答案 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的公共变量。