質問

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に登ってください)

歓声

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top