Изменить цвет фона QLabel на определенное время - PullRequest
0 голосов
/ 30 августа 2018

В моем коде Qt есть QLabel с заданным цветом фона.

Я бы хотел изменить цвет фона только на одну секунду, а затем вернуть его к исходному цвету.

Я думал об использовании функции sleep (), но есть ли способ сделать это, не блокируя остальные действия программы?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы должны использовать QTimer::singleShot(...) и QPalette:

#include <QApplication>
#include <QLabel>
#include <QTimer>

class Label: public QLabel{
public:
    using QLabel::QLabel;
    void changeBackgroundColor(const QColor & color){
        QPalette pal = palette();
        pal.setColor(QPalette::Window, color);
        setPalette(pal);
    }
    void changeBackgroundColorWithTimer(const QColor & color, int timeout=1000){
        QColor defaultColor = palette().color(QPalette::Window);
        changeBackgroundColor(color);
        QTimer::singleShot(timeout, [this, defaultColor](){
            changeBackgroundColor(defaultColor);
        });
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Label label;
    label.setText("Hello World");
    label.show();
    label.changeBackgroundColorWithTimer(Qt::green, 2000);
    return a.exec();
}
0 голосов
/ 30 августа 2018

Может быть, вы можете использовать QTimer, чтобы подождать секунду. Используйте timer->start(1000), чтобы подождать секунду и создайте в своем классе СЛОТ, который получает сигнал Qtimer::timeOut для изменения цвета фона метки.

...