如圖,有dialog A ,B, C。
問題場景是這樣:從A到B,就簡單的hide掉A,showB,對B界面什么都不操作回傳A界面(hideB,showA)正常,但是B界面有一個表格,只要對表格進行刪改等操作回傳A界面就要等A界面刷半天(估計6-7秒,這怎么能忍受),不是崩潰,就彈個框,但是框里面的內容是灰的,什么都不顯示。但其實回傳A界面的時候,B界面的所有操作或者其他動作都做完了(表格等都已經正常顯示了),沒有開執行緒等。
而且我發現show太慢,先showMinized,再showNormal結果又正常了,求各位大哥不吝賜教。。這到底是什么原因?兩個頁面具體的代碼太多了,我就不貼上來了。就貼個B回傳A界面的代碼。
void cGuideAlterNeedleUi::on_pushButtonBack_clicked()
{
// mPtrGuideInputUi->show();
mPtrGuideInputUi->showMinimized();
mPtrGuideInputUi->showNormal();
this->hide();
}
就是一個按鈕的槽。
uj5u.com熱心網友回復:
在show里邊打時間log,看看慢到哪個函式,然后再具體分析uj5u.com熱心網友回復:
可以具體一點嗎?能給個示例代碼嗎?有點沒看懂。
uj5u.com熱心網友回復:
兩行代碼之間把時間寫到檔案里,然后對比時間不就可以了么
uj5u.com熱心網友回復:
在show里邊打時間log,看看慢到哪個函式,然后再具體分析
可以具體一點嗎?能給個示例代碼嗎?有點沒看懂。
兩行代碼之間把時間寫到檔案里,然后對比時間不就可以了么
知道你的意思了,用log檔案記錄這兩行之間跑的代碼加時間,比較時間,我試試哈。
uj5u.com熱心網友回復:
在show里邊打時間log,看看慢到哪個函式,然后再具體分析
可以具體一點嗎?能給個示例代碼嗎?有點沒看懂。
兩行代碼之間把時間寫到檔案里,然后對比時間不就可以了么
知道你的意思了,用log檔案記錄這兩行之間跑的代碼加時間,比較時間,我試試哈。
對的,這樣定位到show函式哪里慢了,如果不是show慢那就是你原來的處理邏輯慢
uj5u.com熱心網友回復:
建議不要兩個界面show hide的 你可以用一個stacked widget把兩個視窗放一起。setCurrentWidget()切換兩個視窗就好uj5u.com熱心網友回復:
建議不要兩個界面show hide的 你可以用一個stacked widget把兩個視窗放一起。setCurrentWidget()切換兩個視窗就好
很感謝,原本不知道有stacled widget這個東西,請問一下多個界面的show或者hide,特別是界面比較多的情況下可能有什么意外情況?原因是什么?
uj5u.com熱心網友回復:
最近我也碰到show不出來的情況,這個時候你可以試一下show后呼叫QAppliaction::processEvents()因為show是一個事件,執行緒在有其他耗時操作時(大檔案讀寫、復制等)并不會立馬呼叫show事件。
uj5u.com熱心網友回復:
把 this->hide(); 注釋掉,看看mPtrGuideInputUi 視窗 要多長時間顯示
uj5u.com熱心網友回復:
學習了
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/126760.html
標籤:Qt
