Изменить текст метки на некоторое время - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть текст в моей метке, и теперь я хочу изменить этот текст на 1 минуту, а затем вернуться к старому тексту.

В моем конструкторе я сделал:

ui->lbl->setText("Original text");
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(atTime()));
timer->setInterval(1000);
timer->setSingleShot(false);
timer->start();

В моей функции atTime () :

...
text="Different text";
QTimer::singleShot(60000, this, SLOT(changeText()));
...

и changeText () функция:

void MainWindow::changeText()
{
    ui->lbl->setText(text);
}

Используя этот код, я могу сделатьмой текст меняется в определенное время, но он остается таким.Как сделать так, чтобы этот текст был там в течение 1 минуты, а затем снова изменился на оригинальный?

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вы можете использовать простую функцию, подобную этой:

void change(QLabel * label, const QString & text, int ms_keep = 60000, int ms_after = 0)
{
    QString originaltext = label->text();
    QTimer::singleShot(ms_after, [=](){
        label->setText(text);
        QTimer::singleShot(ms_keep, [=](){
            label->setText(originaltext);
        });
    });
}

В следующем примере временный текст будет установлен через пять секунд, а исходный текст будет восстановлен через десять.

ui->lbl->setText("original text");
change(ui->lbl, "temporary text", 10000, 5000);

Если вы хотите установить временный текст немедленно, опустите последний аргумент (по умолчанию ноль):

change(ui->lbl, "temporary text", 10000);
0 голосов
/ 26 сентября 2019

Очевидно, что вы запустили таймер для перехода на новый текст, но вы не восстановили текстовое значение в исходное, поэтому даже если тайм-аут таймера будет запущен снова, через 60000 мс текст останется «Различный текст».Короче говоря, вам нужно менять текстовое значение каждый раз, когда выполняется функция тайм-аута, в вашем случае функция changeText.Например, какое-то базовое решение, которое вы можете улучшить в дальнейшем:

void MainWindow::changeText()
{
    if (text == newValue) // lets say newValue = "Different text"
        text = oldValue;  // lets say oldValue = "Original text"
    else
        text = newValue;
    ui->lbl->setText(text);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...