2014-10-27 164 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