最近搞了搞Qt的截屏程序,参考了网上几个例子,但是那些例子都加了很多作者自己要完成的内容,别人看起来比较费劲,我整理了一下,其实真正截图起作用的就那么几行代码,所以我觉得有必要分享一下
QPixmap fullScreen; int screenWidget = 640; //屏幕尺寸设置,自己要写别的函数修改尺寸的改这里 int screenHight = 480; //就是这一步截取了全屏 fullScreen = QPixmap::grabWindow(QApplication::desktop()->winId(),0,0,screenWidget,screenHight); //这一步是设置弹出框询问保存位置和命名的,要自己修改位置和命名的改这里 // QFileDialog::Options options; // QString selectedFilter; // QString fileName = QFileDialog::getSaveFileName(this, // tr("Save picture"), // "savescreen.jpg", // &selectedFilter, // options); //设置截图区域,截图区域是从整屏幕截图中复制相应的区域,要自己写函数的改这里 // int x = 0; // int y = 0; // int w = 300; // int h = 300; /****************************以下几步是正常的保存QPixmap,可以不转QIameg****************************/ // fullScreen = fullScreen.copy(x,y,w,h); //截取区域改这里 // fullScreen.save(fileName,"JPG") 需要有保存对话框的这么写 // if(fullScreen.save("/savescreen.jpg","JPG")) // qDebug("----------save screen success----------"); /**************以下几步是针对嵌入式系统,图像位数有限制,转为了8位的图像,PC端可以不需要**************/ QImage image = fullScreen.toImage(); // image = image.copy(x,y,w,h); //截取区域改这里 //转8位 image = image.convertToFormat(QImage::Format_Indexed8,Qt::AutoColor); //image.save(fileName,"JPG") 需要有保存对话框的这么写 if(image.save("/savescreen.jpg","JPG")) qDebug("----------save screen success----------");以上的代码,只要写在一个空的工程里,就能运行了,我是在嵌入式的linux下运行,所以会有图像位数的限制,要转一下QImage降低位数,我直接保存在了固定的路径,名称也固定了,运行一次截一次图,这样就是最小最简洁的了
然后我把各种需要扩展的地方都做了注释,比如要自己写接口设定截图区域的,我标了在哪里改,自己要写保存路径的,我也标出来在哪里改,要是在PC端运行的,可以直接保存QPixmap。
仅希望对别人有所帮助