Что возвращает wxYield()? Это связано с тем, почему мой guauge не обновляется?
Я использую 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?
2 ответа
Вы не говорите, что такое 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();
}
Вы также можете попробовать следующее, ради эффективности и меньшего мерцания
// force the gauge to be repainted.
gaugeProgressFolders->Refresh();
gaugeProgressFolders->Update();
Возможно, уже поздно отвечать, но я не думаю, что 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 () заставляет макет перерисовываться. Это было эффективно для меня в прошлом.