1

というフォームで呼び出されましlineEditた。というタイトルの 2 番目のフォームには、と呼ばれるボタンと OK ボタンがあります。myValMainWindowSecondWindowlineEditmyVal2OKButton

最良の解決策は、シグナルとスロットを使用することだと思います。いろいろなサイトを探しましたが、使ってみました。 connect(ui.OKButton, SIGNAL(clicked()), MainWindow, SLOT(transferValue));

しかし、私はそれを機能させることができませんでした。

4

3 に答える 3

2

私の考えでは、上記のように、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();
}

2 番目のウィンドウは、MainWindow とその内部を認識する必要はありません

于 2012-11-08T15:37:03.000 に答える
0

最善の解決策は、2 番目のウィンドウの性質によって異なります。

2 番目のウィンドウがモードレス ダイアログの場合、シグナルとスロットが適しています。OK ボタンのclicked()信号を、メイン ウィンドウによって実装されたスロットに接続します。スロット内で、2 番目のウィンドウで行編集の値を読み取り、それをメイン ウィンドウの行編集にコピーします。

2 番目のウィンドウがモーダル ダイアログの場合、シグナルとスロットは必要ありません。QDialog派生クラスを使用し、への呼び出しを使用して表示する必要がありますexec()。この関数が戻ると、戻り値は、ユーザーが [OK] または [キャンセル] をクリックしたかどうかを示します。この値に基づいて、行編集値をコピーするかどうかを決定できます。

于 2012-11-08T03:39:30.517 に答える
-1

SecondWindow のコンストラクターを確実にオーバーライドし、MainWindow のインスタンスを引数として渡すと、MainWindow クラスのパブリック変数に制約なしでアクセスできます。

于 2012-11-08T07:32:22.067 に答える