QTime QTimer timeout () управляемый секундомер имеет высокую загрузку процессора - PullRequest
0 голосов
/ 05 января 2011

В моей игре мне нужен секундомер, чтобы измерить и показать прошедшее время.

Для этого я сделал простой виджет:

    ZuulStopwatchWidget::ZuulStopwatchWidget(QWidget *parent) :
    QWidget(parent)
{
        num = new QLCDNumber(this); // create the display
        num->setDigitCount(9);

        time = new QTime();
        time->setHMS(0,0,0,0); // set the time

        timer = new QTimer(this);

        connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
        i=0;
        QString text = time->toString("hh:mm:ss");
        num->display(text);
        //num->setStyleSheet("* { background-color:rgb(199,147,88);color:rgb(255,255,255); padding: 7px}}");
        num->setSegmentStyle(QLCDNumber::Flat); //filled flat outline
        //setStyleSheet("* { background-color:rgb(236,219,187)}}");

        layout = new QVBoxLayout(this);
        layout->addWidget(num);
        setMinimumHeight(70);
}

ZuulStopwatchWidget::~ZuulStopwatchWidget()
{
    // No need to delete any object that has a parent which is properly deleted.

}
void ZuulStopwatchWidget::resetTime()
{
    time->setHMS(0,0,0);
    QString text = time->toString("hh:mm:ss");
    num->display(text);
    i=0;
    stopTime();
}

void ZuulStopwatchWidget::startTime()
{
    //flag=0;
    timer->start(1);
}

void ZuulStopwatchWidget::stopTime()
{
    timer->stop();
}


void ZuulStopwatchWidget::showTime()
{
    QTime newtime;
        //if(flag==1)
                //i=i-1;
    i=i+1;
    newtime=time->addMSecs(i);
    QString text = newtime.toString("mm:ss:zzz");
    num->display(text);
}

Но когда я запускаю свою игру, загрузка процессора составляет около 13% на 2,5 ГГц i5. Я знаю, что это не проблема, но это глупо для глупых часов.

Я делаю это совершенно неправильно или это обычная практика?!

Большое спасибо заранее.

1 Ответ

2 голосов
/ 05 января 2011

Start (1) устанавливает таймер на срабатывание каждую миллисекунду

Затем вы хотите отформатировать строку и напечатать ее на экране в 16 раз быстрее, чем экран, вероятно, обновляется в любом случае

...