使用Qt作窗口截屏(含源码)
截屏(screenshot),就是將屏幕上的東西拷貝下來(lái)存成圖片文件。介紹的好像有點(diǎn)多余:(,那我們就直接切入正題。
QPixmap提供了兩個(gè)函數(shù)grabWidget和grabWindow可以將屏幕上的窗體存成一個(gè)QPixmap格式的圖片,很容易再將QPixmap存成文件。函數(shù)使用很簡(jiǎn)單,兩行代碼就可以。
QPixmap pixmap = QPixmap::grabWidget(this);//this是調(diào)用該函數(shù)的QWidget *指針
pixmap.save(“widget.png”,”png”);
這兩個(gè)函數(shù)的區(qū)別,我個(gè)人理解是grabWindow可以抓取窗口管理器的內(nèi)容,如果不是應(yīng)用的頂層窗口,那么grabWidget和grabWindow沒(méi)什么區(qū)別。下面是我的兩個(gè)截圖,一個(gè)帶窗口管理器的,一個(gè)不帶。
?
下面是一個(gè)簡(jiǎn)單的源碼演示,在blog頁(yè)上點(diǎn)擊按鈕的時(shí)候調(diào)用grabWindow(),在bbs頁(yè)上點(diǎn)擊大按鈕的時(shí)候去調(diào)用grabWidget().注意,我在第一個(gè)頁(yè)里調(diào)用的是整個(gè)desktop的窗口id,然后根據(jù)坐標(biāo)取到了當(dāng)前窗口的截圖。所以你也可以通過(guò)它去獲取非Qt窗口的截圖,當(dāng)然你需要一點(diǎn)X11的知識(shí)設(shè)法搞到其它窗口的坐標(biāo)。
源碼:
#include <QApplication>
#include <QDesktopWidget>
#include <QTabWidget>
#include <QPushButton>
#include <QPixmap>
class MyTabWidget:public QTabWidget{
Q_OBJECT
public slots:
void snapshot1(){
QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId(),pos().x(),pos().y(),frameGeometry().width(),frameGeometry().height());
pixmap.save(“blog.png”, “png”);
}
void snapshot2(){
QPixmap pixmap = QPixmap::grabWidget(this);
pixmap.save(“bbs.png”, “png”);
}
};
int main(int argc,char *argv[]){
QApplication app(argc,argv);
MyTabWidget tabw;
QPushButton *pb1=new QPushButton(“http://www.cuteqt.com/blog”,&tabw);
QPushButton *pb2=new QPushButton(“http://www.c0teqt.com/bbs”,&tabw);
tabw.addTab(pb1,”blog”);
tabw.addTab(pb2,”bbs”);
tabw.connect(pb1,SIGNAL(clicked()),&tabw,SLOT(snapshot1()));
tabw.connect(pb2,SIGNAL(clicked()),&tabw,SLOT(snapshot2()));
tabw.resize(300,200);
tabw.show();
return app.exec();
}
#include “main.moc”
源碼里用到的一點(diǎn)坐標(biāo)知識(shí),和Qt的窗口坐標(biāo)有關(guān),附圖一張,勝過(guò)千言萬(wàn)語(yǔ)
轉(zhuǎn)載于:https://blog.51cto.com/seanyxie/1375988
總結(jié)
以上是生活随笔為你收集整理的使用Qt作窗口截屏(含源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Javascript 面向对象全新理练之
- 下一篇: 读《差距在哪里,你与开发高手的距离到底有