2016-05-09 13 views
0

QTプロジェクトに2つのWindowsがあります。 MainWindowおよびLoadMainWindowのフィールドを更新したい場合は、Loadを閉じます。私はすでにいくつかのことを試みました。私はまた、すべての必要なことを行うupdate_channel()と呼ばれる機能を持っています。現時点では、PushButtonを使用して手動で変更を行います。これは正常に動作しますが、ロードウィンドウが閉じられるたびに自動的に呼び出されるこの関数が必要です。例えば、私が試した:Qt5 MainWindowを子ウィンドウから更新する

connect(load, SIGNAL(load->close()), this, SLOT(update_channel())); 

connect(load, &Load::update_mainwindow(), ui->pb_update, &QPushButton::click); 
(with a public signal in "load.h" and emit update_mainwindow in "load.cpp") 

を私はアイデアのうち、と私は、私は、もはやするためにGoogleが知っている時点では午前、ヒントのどれも私がで作品を見られません私の場合。

私は例えば、closeそれを呼び出すQDialogクラスをサブクラス化し、それに信号を追加します(Qtの5.5.1用)のQt Creatorを3.6.0に

+0

あなたのウィンドウは 'QWindow'または' QWidget'ですか? – ixSci

+0

MainWindowはQMainWindow、読み込みはQDialog – Wimmal

答えて

0

を使用しています。その後、closeEventメンバ関数を無効にし、そこからcloseシグナルを放出します。また、update_channel()機能がスロットであることを確認してください。次に、close信号をupdate_channelスロットに接続すれば、完了です。

もう1つの方法は、QDialog既存信号の1つ、acceptedまたはrejectedを使用することです。それらは上記の解決法と全く同じではありませんが、ダイアログは通常は受け入れられるか拒否されるため、受け入れられるべきです。

+0

まずは、すばやい返信をいただきありがとうございます。ちょうど1つの質問:QDialogのサブクラスはどこですか? MainWindowまたはLoadで? – Wimmal

+0

@ WimmalあなたのLoadが 'QDialog'オブジェクトであるため、サブクラスのオブジェクトになるべき' Load'です – ixSci

+0

ありがとう!私はそれを試し、あなたに知らせるでしょう。 – Wimmal

0

私はそれを自分で解決しました。問題はconnect文の定義ではありませんでした。問題は私のコードの中にこのコードを置く行です。

コードの先頭に「接続」権限を置きます。ここでは、「ロード」ウィンドウはありません。だから私はそれを次のように変更しました:

load = new Load(this); 
connect(load, SIGNAL(update_mainwindow()), this, SLOT(update_channel())); 
load->show(); 

これは期待どおりです!

関連する問題