3

Qt の Paintevent に問題があります。Paintevent スレッドは、開始時にほぼすべての CPU を使用しています。

私のメインウィジェットのコンストラクターのコード。

Display_dialog::Display_dialog(QWidget *parent):QDialog(parent),
ui(new Ui::Display_dialog)
{
     ui->setupUi(this);
     pRedraw_Timer = new QTimer(this);
     connect( pRedraw_Timer, SIGNAL(timeout()), this, SLOT(update()));
     pRedraw_Timer->start( 15 );
}

そして私のペイントイベントでは、

 void MyDialog::paintEvent(QPaintEvent *event)
 {
 }

Paintevent には何もありません!!!しかし、このコードを実行すると、CPU が 100% 消費されます [ CPU is Single core 1 Ghz Processor]。

そして、pRedraw_Timer->stop()更新を呼び出すこの pRedraw_Timer を stop( ) すると、たとえば、ボタンをクリックすると、使用率がほぼ瞬時に 1% または 10% 未満になります!!!!

私の要件は、シリアル ポートからの入力に応じてグラフをプロットすることです。したがって、更新を使用してビューを常に更新する必要があります。ただし、プロット中に、CPUが割り込みを処理するために切り替わるため、割り込み(優先度が高い)がプロットを妨げているようです。割り込み処理後、作図は正常に戻ります。私の質問は、このペイントイベント スレッドがまったく何もしていないにもかかわらず、100% の CPU を消費する方法と理由です。このシナリオを変更するにはどうすればよいですか?

編集(kuba ober 用): 他にもいくつかの機能とスロットがあります。しかし、それを呼び出すか、シグナルをトリガーしない限り、何も呼び出されません。私はまったく何もしていません。プログラムを実行した直後に、すべての CPU を消費します。メインダイアログのコンストラクターのみが呼び出されることに注意してください。

4

0 に答える 0