Jak uśpić program już po utworzeniu okna

0

Tworzę sobie okno i grafikę, która ma być wyświetlana w tym oknie,
następnie chcę odczekać powiedzmy 3s
i utworzyć nową grafikę i znów wyświetlić w tym samym widgecie.
kod konstruktora wygląda tak:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    int x = 15, y = 15;
    int size = 10;

    QImage image = QImage(x*size, y*size, QImage::Format_RGB32);

    QGraphicsScene *graphic = new QGraphicsScene (this);

    graphic->addPixmap(QPixmap::fromImage(image));
    ui->graphicsView->setScene(graphic);

    QThread::msleep(3000);
}

Program działa w ten sposób, że czeka 3s, po czym pojawia się dopiero okno.
Próbowałem też z sygnałem, który jest emitowany zamiast QThread::msleep(3000);, a komenda msleep() wykonywana jest w slocie, ale efekt jest taki sam.
Da się to jakoś zrobić bez tworzenia nowych wątków?

0

Robisz sleepa w kontruktorze głównego okna i się dziwisz dlaczego pojawia się po 3 sekundach?

Najlepiej w tym przypadku, najprawdopobniej, będzie gdy zainicjujesz początkowy obrazek wartością domyślną, aby okno wyświetliło się w odpowiednich rozmiarach. Przed wyświetleniem utworzysz nowy wątek i do niego przekażesz obiekt okna głównego, z którego będziesz mógł swobodnie zmieniać obrazek co określoną liczbę sekund. Naturalnie wszystko opakuj w jakąś synchronizację obiektową, lub skorzystaj z mechanizmów QT.

2

Żadnych nowych wątków. QTimer i QTimer::singleShot.

0

Dzięki, o to chodziło!
QTimer::singleShot to w sumie taki connect

1 użytkowników online, w tym zalogowanych: 0, gości: 1