void MainWindow::slWaitCursor(){ QApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) ); cursorchanged = true;}void MainWindow::slNull(){ slMessage("null\n"); // отладочная печать}void MainWindow::redrawScene(){ QTimer timer; // = new QTimer; cursorchanged = false; connect( &timer, SIGNAL(timeout()), this, SLOT(slWaitCursor()) ); timer.start( 500 ); //a->processEvents(); large_object->Redraw(); connect( &timer, SIGNAL(timeout()), this, SLOT(slNull()) ); timer.stop(); if( cursorchanged ) QApplication::restoreOverrideCursor();}
C++ (Qt) large_object->Redraw();
C++ (Qt)class CursorWaiter{public: CursorWaiter( int timeout = 500 ); void process();}; // Использованиеvoid MyClass::Redraw(){ CursorWaiter cw( 200 ); foreach(...) { // Считаем // Рисуем // Проверяем сколько времени прошло, если больше timeout, то меняем его на "Занято" cw.prosess(); } // При выходе из функции Redraw объект cw разрушиться, в деструкторе восстановить курсор.}