2014-10-27 160 views
1

我使用的wxWidgets和我有這樣的代碼:wxYield()返回什麼?它與我爲什麼沒有更新?

gaugeProgressFolders->SetRange(folderList.size()); 
    for(int i=0;i<folderList.size();i++) 
    { 
     ProcessOneSet(folderList[i]); 
     gaugeProgressFolders->SetValue(i+1);   
     wxYield(); 
    } 

的wxYeild不更新guauge。我想知道爲什麼它不起作用?

看着wxYield,我注意到它返回一個bool,但沒有關於它返回的文檔。

爲什麼我的大小不更新,我該如何修復它?

wxYield返回什麼?

+0

我搜索了規範我無法找到它返回的內容。 – 2014-10-27 15:18:05

+0

自從我做了任何事情已經有好幾年了,並且只剩下很少的回憶,但僅僅提到'wxYield'就會帶來不可思議的重入錯誤的震顫和骯髒的記憶,這些錯誤幾乎無法從callstack診斷出來,並且需要永久修復。呸。抱歉。 – Damon 2014-10-27 16:32:14

回答

1

你不說什麼gaugeProgressFolders是。也許它是wxGauge

無論如何,你爲什麼期望wxYield神奇地更新顯示?

你必須編寫代碼來更新顯示。

假設你的代碼的不同的東西,你可以寫這樣的事情:

gaugeProgressFolders->SetRange(folderList.size()); 
for(int i=0;i<folderList.size();i++) 
{ 
    ProcessOneSet(folderList[i]); 
    gaugeProgressFolders->SetValue(i+1);   
    // wxYield(); Don't call this, it does nothing 

    // force the window to be repainted RIGHT NOW. 
    Refresh(); 
    Update(); 
} 

您也可以嘗試以下方法,爲efficency閃爍較少的緣故

// force the gauge to be repainted. 
    gaugeProgressFolders->Refresh(); 
    gaugeProgressFolders->Update(); 
+0

這不起作用:( – mans 2014-10-28 10:02:20

+1

您將不得不提供一個構建並運行的最小示例程序,以顯示問題 – ravenspoint 2014-10-28 12:18:23

0

也許這是有點遲到的迴應,但我不認爲wxYield()是你更新儀表的目的。也許嘗試:

gaugeProgressFolders->SetRange(folderList.size()); 
    for (int i = 0; i < folderList.size(); i++) 
    { 
     ProcessOneSet(folderList[i]); 
     gaugeProgressFolders->SetValue(i+1);   
     this->Layout(); //this being your window/dialog/frame 
    } 

Layout()強制佈局重繪。這對我來說一直很有效。

+0

也許這會起作用,但它也會迫使sizer重新計算它們的佈局,這是不必要的。調用刷新,直接更新 – ravenspoint 2014-10-30 16:24:29

+0

確實,效率不高根據我的經驗,刷新和更新不會收集預期的結果,但我發現該版本確實有效 – blueberryredbull 2014-10-30 17:46:44

+0

刷新,更新強制窗口使用相同的佈局重繪。 – ravenspoint 2014-10-30 18:06:45