Qt抓取小部件并保存图像

Cma*_*erG 4 c++ qt

我有以下问题.我想抓取一个小部件并将其保存为图像.我想把它保存为png,jpeg和tiff.我写了以下代码:

QString s =  QFileDialog::getSaveFileName(this, "Save as", "Choose a filename", "PNG(*.png);; TIFF(*.tiff *.tif);; JPEG(*.jpg *.jpeg)");

std::string current_string = s.toLocal8Bit().constData();
//current_string = current_string + ".png";

char * buffer = new char[current_string.length()];
std::string temp = buffer;
char* temp2 = &temp[0];
strcpy(buffer, current_string.c_str());

char* pch = strtok (temp2,".");
pch = strtok (NULL, ".");


if(!QPixmap::grabWindow(m_widget->winId()).save(buffer,pch))
{
    QMessageBox::warning(this, "File could not be saved", "ok", QMessageBox::Ok);
}
Run Code Online (Sandbox Code Playgroud)

这适用于我的笔记本电脑.当我做一个Visual Studio安装也能正常工作在我的笔记本电脑,但是当我在另一台PC上安装它,然后PNG格式正常工作(保存右图),但JPEG和TIF无法保存.然后我在另一台电脑上试了一下,但是我在Visual Studio中直接用项目文件试了一下.在那里,我有所有项目设置,如在我的电脑等,有jpeg和TIF不起作用.PNG可以工作,但它只在白色图像上保存白色图像.此外,我还尝试了安装文件及其相同的PNG =白色图像.

谁能帮我?

小智 8

这是将窗口小部件另存为图像的最简单方法.这种方法适用于Qt 5:

ui->myWidget->grab().save("image.png");
Run Code Online (Sandbox Code Playgroud)