1

我有一个lineEdit名为. 在名为的第二种形式中,我有一个被调用和一个被调用的确定按钮。myValMainWindowSecondWindowlineEditmyVal2OKButton

我认为最好的解决方案是使用信号和插槽。我搜索了不同的网站,但我尝试使用。 connect(ui.OKButton, SIGNAL(clicked()), MainWindow, SLOT(transferValue));

但是,我无法让它工作。

4

3 回答 3

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 及其内部

于 2012-11-08T15:37:03.000 回答
0

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

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

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

于 2012-11-08T03:39:30.517 回答
-1

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

于 2012-11-08T07:32:22.067 回答