c++ - Qt抓取小部件并保存图像

标签 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);
}

这在我的笔记本电脑上运行良好。当我制作 Visual Studio 安装程序时,它在我的笔记本电脑上也能正常工作,但当我将它安装在另一台电脑上时,png 格式工作正常(保存正确的图像),但无法保存 jpeg 和 tif。然后我在另一台电脑上试了一下,但我直接在 Visual Studio 中用项目文件试了一下。在那里我有所有项目设置,比如我的电脑等。jpeg 和 tif 不起作用。 PNG 有效,但它只在那台电脑上保存白色图像。此外,我还在那里尝试了安装文件及其相同的 PNG = 白色图像。

谁能帮帮我?

最佳答案

这是将小部件保存为图像的最简单方法。这种方法适用于 Qt 5:

ui->myWidget->grab().save("image.png");

Qt 文档:

关于c++ - Qt抓取小部件并保存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16362191/

相关文章:

c++ - 可变参数模板与默认模板参数相结合

单击按钮时 QTableView 不会更新已编辑的单元格

c++ - 如何在诺基亚 qt C++ 中将一页导航到另一页;

c++ - 为什么 cv::mat 的 vector 总是返回第一张图像?

c++ - 为什么在Boost中不使用Execute-Around Idiom作为用于线程安全访问对象的智能指针?

android - 在 Android Studio 中找不到 opencv2

c++ - 避免对 iOS 应用程序进行逆向工程,这可能吗?

c++ - 将 char* 转换为 int

c++ - 将 Qt 与 Visual Studio Code (Windows) 结合使用

c++ - qt 中对 QDeclarativePropertyMap 的 undefined reference