close()を呼び出して()UIが閉じません
-
21-12-2019 - |
質問
QTでは、私は2つのフォームを持っていますFirstUIとSecondUIとは言います。メインはFirstUIを開きます。ここでは、アプリケーションに必要なデータベースが存在するかどうかを確認し、存在しない場合は新しいものを作成します。また、データベースに保存されているWiFiネットワーク詳細があるかどうかを確認します。最後に接続されたWiFiの詳細がある場合、アプリケーションは利用可能なネットワークをスキャンし、データベースからの詳細を使用してWiFiネットワークに接続します。
データベースにWiFi詳細がない場合、またはデータベースにリストされているネットワークが存在しない場合、またはアプリケーションがWiFiネットワークに接続できなかった場合は、信号WiFinotConnected();
SixeUIを開くスロットに信号を接続しました。
connect(this,SIGNAL(WifiNotConnected()),this,SLOT(OpenSecondUI()));
.....
void FirstUI::OpenSecondUI()
{
SecondUI *sec = new SecondUI();
this->close();
sec->show();
}
.
SecondUIが開きますが、これはFirstUIを閉じません。
編集:WiFiの詳細が存在する場合は、Qobjectを継承し、接続タスクを継承するクラス(WiFiboot)があります。 GUIでGIFファイルを再生し、接続が同時に実行され、WiFi接続を実行して別のスレッドに移動したクラス(WiFiboot)がインスタンス化されていることがわかります。 WiFiが接続された後、スロットに接続されている完成信号を発して秒内
を開くconnect(worker,SIGNAL(finished()),this,SLOT(FinishedConnection()));
void FirstUI::FinishedConnection()
{
OpenSecondUI();
}
.
ここではFirstUIを閉じて、2秒を開きます。しかし最初のケースではそうではありません。なんでこんなことが起こっているの?それについて行くより良い方法はありますか? 任意の助けが高く評価されています
解決 2
OpenSecondui()がコンストラクタ自体で呼び出されました。したがって、openSecondui()のclose()は、UIが起動して実行される前に行われました。これを解決するために、コンストラクタの@ Andrea.Marangoniのヒントが取り込まれていますので、シングルショットタイマを使用して、コンストラクタ内のコード全体をスロットに移動し、一定の遅延後にスロットを呼び出しました。これにより、スロットopenSecondui()が呼び出される前に、UIは上げられて実行されていました。
他のヒント
最初の確認
this->close();
.
trueを返します。もう一つのことは
を使ってそれを隠すだけかもしれません。QWidget::hide()
.
FirstUI
の親としてSecondUI
を設定するため、FirstUI
のインスタンスが複数ある場合は、メモリがリークされません。(まだclose()
をgengetに登ってください)
歓声