QT起動アニメーションとQThread

1645 ワード

1.アニメーションの実現原理を起動する
原理:QLabelでGIFピクチャをロードし、時間を設定してアニメーションの時間を制御し、カードの場合はQAPplication::processEvents()を呼び出してメインループに入っていないイベントを処理することができます.
QTメインループ:appが呼び出されたことを指す.exec()後、プログラムはイベントループに入ります.ダイアログボックスにも独自のイベントループがあり、各スレッドにも独自のイベントループがあります(QThread::exec()を呼び出した後).
QCoreApplicaton::exec()
QApplication::exec()
QDialog::exec()
QThread::exec()
QDrag::exec()
QMenu::exec()

QEventLoopを使って、いつでもイベントループに入ることもできます.イベントループが開き、イベントループはまず無限の「ループ」であり、プログラムはexec()の中で無限にループし、exec()の後ろに続くコードが実行機会を得られず、プログラムがexec()から飛び出すまで実行することができる.exec()から飛び出した場合、イベントループは終了します.QEventLoop::quit()はイベントループを終了することができる.
QEventLoop loop;
QTimer::singleShot(1000, &loop, SLOT(quit()));
loop.exec();

アニメーションインスタンスを開始するには
QLabel label(&splash);
QMovie mv(":images/danceMan.gif");
label.setMovie(&mv);
mv.start();

//     
QTime t;
 t.start();
 while(t.elapsed()<5000)
 {
     QApplication::processEvents();
 }

2.QThreadの使用方法の一つ
class MyThread : public QThread
{
	Q_OBJECT
public:
    MyThread(QObject * parent=0);
 
protected:
    virtual void run();    
}

例は上記の通りです.このようにして、メインプログラムでMyThreadのインスタンスをインスタンス化します.
{	
	...
	private:
		MyThread * thread;
}

start()を呼び出し、スレッドを起動し、スレッドはrun()関数に入ります.run()関数の最後にexec()を追加すると、スレッドは終了せず、イベントサイクル中であり、そうでない場合、run実行が完了するとfinished()信号が送信される.スレッドが完全に終了するまで、スレッドが解析されます.もちろん、途中でスレッドを強制的に終了させることもできます.
thread = new MyThread()
start();

参照先:
  • my coding.net
  • 定義
  • https://www.cnblogs.com/-wang-cheng/p/4973021.html