QTスクリーンgrapWindowは、オペレーティングシステムのバージョンは、プロセス間通信を切断QClipBoard

QPixmapの:: grapWindow(winID)画像を格納するための
現在のウィンドウIDのPIDプログラム取得QDesktopWidget
各ウィンドウはwinIDを(有する)を
3 //
スケーリングスケーリングなどピックスマップ
オペレーティングシステムのQClipboardカット版
            m_pic = QPixmapの:: grabWindow(w.winId())。
            QClipboard *クリップボード= QGuiApplication ::クリップボード();
// QStringのoriginalText = clipboard->テキスト();
// qDebug()<< originalText。
            clipboard-> setPixmap(m_pic)。
 

CPP

#include " mainwindow.h " 
の#include " ui_mainwindow.h " 
の#include <QDesktopWidget> 
書式#include <QFileDialog> 
書式#include <QScreen> 
書式#include <QDir> 
書式#include <QClipboard> 
書式#include <QDebug> 

メインウィンドウ::メインウィンドウ(QWidgetの * 親):
    QMainWindow(親)、
    UI(新しい宇井::メインウィンドウ)
{ 
    UI - > setupUi(この); 
} 

メインウィンドウ::メインウィンドウ()
{ 
    削除UIを、

無効メインウィンドウ:: on_newPicButton_clicked()
{ 
    場合(UI-> radioButtonHide-> にisChecked()){ 
        タイマー = 新しいQTimer();
        // timer->のsetInterval(UI-> spinBox->値()* 1000); 

        // this->非表示(); 
        timer->開始(1000 / 3 );
        // INT ID = startTimer(UI-> spinBox->値()* 1000)。
        (接続これ >タイマー&QTimer ::タイムアウト、 - この、[= ] {
             // QDesktopWidget W; 
            m_pic = QPixmapの:: grabWindow(はQApplication ::デスクトップ() - > winId()); 

            //保存到剪切版
             // QClipboard *クリップボード= QGuiApplication ::クリップボード(); 

//             QStringのoriginalText = clipboard->テキスト();
//             qDebug()<< originalText。
            // clipboard-> setPixmap(m_pic)。


            QSIZEサイズ = UI-> labelShowPic-> サイズ()。
            UI - > labelShowPic-> setPixmap(m_pic.scaled(サイズ))。
            // timer->停止();
            // this->ショー(); 
        }); 


    } 
    { 
        qApp - >ビープ音(); // 嘀嘀响
    } 
} 

のボイドメインウィンドウ:: on_savePicButton_clicked()
{ 
    QStringのfileNameに = QFileDialog :: getSaveFileName(これ、TR(" ファイルを保存" )、
                               QDir ::電流経路()、
                               TR(" イメージ(* .PNG * .xpm * .JPG)" )) ; 

    もし(!fileName.isEmpty()){ 
        m_pic.save(fileNameに); 
    } 

} 

ボイドメインウィンドウ:: on_exitButton_clicked()
{ 
    この - > 近いです(); 
}

 

.H

#ifndefのMAINWINDOW_H
 の#define MAINWINDOW_H 

の#include <QMainWindow> 
の#include <QTimer> 
の#include <QPixmapの> 名前空間Uiの{
 クラスのメインウィンドウ。
} クラスのメインウィンドウ:公共QMainWindow 
{ 
    Q_OBJECTの公共明示的なメインウィンドウ(QWidgetの*親= nullptr)。
    メインウィンドウ(); プライベートスロット:
     無効on_newPicButton_clicked(); on_savePicButton_clicked(); on_exitButton_clicked(); プライベート









    

    


    宇井::メインウィンドウ * UI。

    QTimer * タイマー。
    QPixmapののm_pic。
}。

#endifの // MAINWINDOW_H

 

プロセス間通信の切断されたバージョンを達成するためにQClipBoard

 

#include " widget.h " 
の#include " ui_widget.h " 


ウィジェット::ウィジェット(QWidgetの * 親):
    はQWidget(親)、
    UI(新しい宇井::ウィジェット)
{ 
    UI - > setupUi(この); 
    m_timer = 新しい QTimer(この); 
    m_timer - >スタート(200 ); 

    (m_timer、接続&QTimer ::タイムアウト、この、&ウィジェット:: fetchPicFromClipBoard)。
} 

ウィジェット::ウィジェット()
{ 
    削除UIを、
}

無効ウィジェット:: fetchPicFromClipBoard()
{ 
    QClipboard *ボード= QGuiApplication ::クリップボード(); 
    QPixmapのPIX =ボード- > ピックスマップ(); 
    UI - >ラベル=> setPixmap(pix.scaled(UI->ラベル=> サイズ()))。
}

 

#ifndefのWIDGET_H
 の#define WIDGET_H 

の#include <QWidgetの> 

する#include <QClipboard> 
の#include <QTimer> 名前空間Uiの{
 クラスウィジェット。
} クラスウィジェット:公共QWidgetの
{ 
    Q_OBJECTの公共明示的なウィジェット(QWidgetの*親= nullptr)。
    ウィジェット(); 無効fetchPicFromClipBoardを(); プライベート
    宇井::ウィジェット *のUI。
    QTimer * m_timer。
}。#endifの//







    




  WIDGET_H

 

おすすめ

転載: www.cnblogs.com/xiangtingshen/p/11074685.html