Использование QTimer для показа слайдов из 5 изображений - PullRequest
1 голос
/ 05 июня 2019

Есть ли способ заставить Клабел показывать другое изображение каждые десять секунд?

Я подключил свой сигнал тайм-аута к слоту с именем 'changePixmap'

    // under ui->setupUi(this);
    QTimer *slideShow = new QTimer(this);
    connect(slideShow,SIGNAL(timeout()),this, SLOT(changePixmap()));
    slideShow->start(10000);

void MainWindow::changePixmap(){
    QString imageNumber = "1";
    ui->photoLabel->setScaledContents(true);
    ui->photoLabel->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored );
    ui->photoLabel->setPixmap(QPixmap("image" + imageNumber + ".jpg"));
    ui->photoLabel->show();
    imageNumber = (imageNumber.toInt()+1) % 5;
}

Программа запускается и выводит одно изображение на Qlabel, но оно не изменяется на следующее изображение.

1 Ответ

4 голосов
/ 05 июня 2019

imageNumber - это переменная, которая позволяет вам изменить изображение, но в вашем случае это всегда «1», поэтому изображение не меняется, последняя строка кода не помогает, так как изменение потеряно.

Решение состоит в том, чтобы сделать imageNumber членом класса, также лучше быть целым числом.

*. Ч

// ...
private:
    int imageNumber = 0;

*. Каст

void MainWindow::changePixmap(){
    ui->photoLabel->setScaledContents(true);
    ui->photoLabel->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Ignored );
    ui->photoLabel->setPixmap(QPixmap(QString("image%1.jpg").arg(imageNumber));
    ui->photoLabel->show();
    imageNumber = (imageNumber + 1) % 5; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...