Что возвращает 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 () заставляет макет перерисовываться. Это было эффективно для меня в прошлом.

Другие вопросы по тегам