0

次のコードはQMessageBox、2 秒後に my を閉じます。しかし、ボックスが閉じているときにテキストが表示されます。ボックスが閉じる前に、非常に速く点滅します。ここで何が起こっているのですか?

 QMessageBox *msgBox = new QMessageBox();
 msgBox->setText("Coördinate is being created, please wait...");
 msgBox->show();
 QTimer::singleShot(2000, msgBox, SLOT(hide()));

ここに画像の説明を入力

これが表示され、閉じる直前にテキストが表示されます。

アップデート

シングル スレッド プログラムでの作業: メソッドWriteMultipleACLCommands()に多くの時間がかかっています。たぶんそれが問題ですか?

  QMessageBox *msgBox = new QMessageBox();
  msgBox->setText("Coördinate is being created, please wait...");
  msgBox->show();
  QTimer::singleShot(2000, msgBox, SLOT(hide()));
  singleton_SerialPortManager->WriteMultipleACLCommands();
  //function writes a few bytes onto a serial connection
4

2 に答える 2

0

あなたのコードは問題ありません、少なくともあなたが示している部分です。私はそれを自分でテストしましたが、問題なく動作します。ただし、ダイアログを閉じることと非表示にすることは 2 つの異なることであることに注意してください。ウィンドウを非表示にするだけです。Window は引き続きメモリに存在します。タイマーで「クローズ スロット」を呼び出し、windows 属性を「クローズ時に削除」に設定したい場合があります。

QMessageBox *msgBox = new QMessageBox();
msgBox->setText("Coördinate is being created, please wait...");
msgBox->show();
msgBox->setAttribute(Qt::WA_DeleteOnClose);
QTimer::singleShot(2000, msgBox, SLOT(close()));

これがあなたが説明した影響の原因でない場合は、さらに情報を提供する必要があります。

于 2015-11-02T11:42:05.437 に答える