2014-02-26 190 views
0

在Qt中,我有一個2表單FirstUI和SecondUI。主要打開FirstUI。在這裏我檢查應用程序需要的數據庫是否存在,如果不存在,則創建一個新的數據庫。它還檢查數據庫中是否存在任何無線網絡詳細信息。如果有最後連接的wifi的詳細信息,那麼應用程序將掃描可用網絡並使用數據庫中的詳細信息連接到WiFi網絡。關閉調用關閉()該用戶界面不關閉

現在,如果數據庫中沒有wifi細節,或者數據庫中列出的網絡不存在,或者應用程序無法連接到wifi網絡,它將發出信號WifiNotConnected();

我已將信號連接到打開SecondUI的插槽。

connect(this,SIGNAL(WifiNotConnected()),this,SLOT(OpenSecondUI())); 
..... 

void FirstUI::OpenSecondUI() 
{ 
    SecondUI *sec = new SecondUI(); 
    this->close(); 
    sec->show(); 
} 

SecondUI打開,但是這不關閉FirstUI。

編輯:如果wifi細節存在,我有一個類(WifiBoot)繼承QObject併爲我執行連接任務。因爲我希望GIF文件在GUI中播放,並且連接發生在同一時間,所以我已經實例化了實現wifi連接的類(WifiBoot)並將其移至另一個線程。的WiFi連接後我發射其被連接到狹槽打開SecondUI

connect(worker,SIGNAL(finished()),this,SLOT(FinishedConnection())); 

void FirstUI::FinishedConnection() 
{ 
    OpenSecondUI(); 
} 

這關閉FirstUI並打開SecondUI成品信號。但在第一種情況下並不是。這是爲什麼發生?有沒有更好的方法去解決它? 任何幫助表示讚賞

+0

看看是否有效:確保第二個用戶界面的模式是「NonModal」。然後在您的代碼中反轉該順序,首先顯示第二個UI,然後關閉當前的一個。 ('sec-> show(); this-> close();') – Mousa

+1

可能是OT,但我無法抗拒。我會建議做一個控制器來完成你的目標。控制器將管理兩個用戶界面,以便分離用戶界面。我不認爲這是一個良好的做法,用戶界面打開另一個用戶界面。 –

+0

@ andrea.marangoni感謝您的回覆。你能否提供一個示例代碼? – Giz

回答

0

的OpenSecondUI()被調用構造函數本身。因此,在UI啓動並運行之前,OpenSecondUI()中的close()發生了。爲了解決這個問題,正如QT論壇所建議的那樣,並且@ andrea.marangoni暗示構造函數的填充過多,我使用了單次計時器,並將構造函數中的所有代碼移到一個插槽中,並在一定延遲後調用該插槽。這確保在調用插槽OpenSecondUI()之前,UI已啓動並正在運行。

0

首先檢查是否

this->close(); 

返回true。其他的事情可能只是隱藏它使用

QWidget::hide() 

以及設置FirstUISecondUI的父母,所以如果你有FirstUI多個實例您的應用程序不會出現內存泄漏。 (忘了父母的事情,如果你仍然close()小部件)

歡呼

+0

它返回true。這就是我感到驚訝的原因。 hide()也不起作用 – Giz