1

Qt の QCustomPlot プラグインを使用して、リアルタイムで取得したライブ データを表示するプロジェクトに取り組んでいます。ディスプレイの背景色は黒で、データの複数のチャネルは異なる色で表示されます。スクリーンショットを撮るときは、印刷に適したものにしたいので、背景は白、すべてのデータは黒です。次のような解決策を考えています。

  1. グラフィック オブジェクトのポインタを操作して、すべての色を好きなように変更する
  2. QWidget::grab() を使用してスクリーンショットを取得し、QPixmap を取得します
  3. すべての色を通常の色に戻します

スクリーンショットを撮るのに間に合うようにシステムが色を変更できなかったため、これは最初はうまくいきませんでした。そこで、QApplication::processEvents() を使用しましたが、すべて私の Mac で動作しました。

ただし、Windows 7 (必須) では機能しません。何をすべきか?

コード:

QSting fileLocation = "...";
toggleColors(false); //function to toggle the colors
QApplication::processEvents();
QPixmap shot = grab();
toggleColors(true);
shot.save(fileLocation, "png");

また。Mac では動作しますが、Windows では動作しません。

更新 1. toggleColors の内容は次のとおりです。

  if(enable)
    ui->plot->setBackground(QBrush(Qt::black));
  else
    ui->plot->setBackground(QBrush(Qt::white));
  ui->plot->repaint();

代わりに試してみましui->plot->update()た。

4

2 に答える 2

0

特に Windows で何が問題なのかはわかりませんが、特定のウィジェットで QWidget::update() を呼び出すことをお勧めします。これにより、次の更新が強制的に再レン​​ダリングされます。

一方、なぜ toggleColors() が何らかの形でそれを引き起こさなかったのか、私にはわかりません。

また、QWidget::setUpdatesEnabled(bool) が「false」に設定されていないことを確認してください。

于 2015-08-05T12:20:39.717 に答える