我正在使用wxwidgets,我有一个这样的代码:
gaugeProgressFolders->SetRange(folderList.size());
for(int i=0;i<folderList.size();i++)
{
ProcessOneSet(folderList[i]);
gaugeProgressFolders->SetValue(i+1);
wxYield();
}
wxYeild不会更新guauge。我想知道它为什么不起作用?
看看wxYield,我注意到它返回了一个bool,但没有关于它返回的文档。
为什么我的guauge没有更新以及如何修复它?
wxYield返回什么?
答案 0 :(得分:1)
你没有说什么是gauProgressFolders。也许是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();
}
为了提高效率和减少闪烁,您可能还会尝试以下操作
// force the gauge to be repainted.
gaugeProgressFolders->Refresh();
gaugeProgressFolders->Update();
答案 1 :(得分: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()强制布局重绘。它对我来说过去很有用。