QTでペイントイベント(WM_Paint)イベントでスクリーンショットを撮ろうとしていますが、どうすればいいですか? このコードを使ってスクリーンショットを撮りましたが、良い、それはデスクトップでいくつかの変更は、その後、あなたが興味を持っているウィジェットのタイマーQTでペイントイベント(WM_Paint)を使用してスクリーンショットを取る方法
void MainWindow::shootScreen()
{
originalPixmap = QPixmap(); // clear image for low memory situations
// on embedded devices.
originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
//emit getScreen(originalPixmap);
updateScreenshotLabel();
}
void MainWindow::updateScreenshotLabel()
{
this->ui->label_2->setPixmap(originalPixmap.scaled(this->ui->label_2- >size(),
Qt::KeepAspectRatio,
Qt::SmoothTransformation));
}
siあなたが気に入っているUIのコントロールからgnalを削除してください。同様に、テキストボックス内のテキストが変化したり、イメージコントロール内のイメージが変更されたときにスクリーンショットを撮りたい場合は、カスタムコントロールを作成し、コントロールの内容が変更されたときにシグナルを出してください。スロットから、スクリーンショットをキャプチャしますか?ペイントでそれをやっていると、あまりにも多くのシナリオがペイントを起こすので、不必要にスクリーンショットが取られます。 – Suneesh
最も簡単な解決策は、目的のオブジェクトにイベントフィルタをインストールすることです。 –
あなたはスクリーンショットを撮っていますか?それがデスクトップ全体であれば、そのアップデートを監視するためにQtにクロスプラットフォームの方法はありません。各プラットフォームでどのように実行されているかを読んでおく必要があります。とにかく、Windows上のスクリーンのネイティブ表現が何であれ、明らかにペイントイベントは発生しません。 –