【问题标题】:Save the screenshot of a widget保存小部件的屏幕截图
【发布时间】:2023-04-10 07:43:01
【问题描述】:

我想在 Qt 中保存一个小部件的屏幕截图。 我创建了以下应该可以工作的代码:

  QWidget* activeWidget = getActiveWidget();//a function that returns the current widget.
  if (activeWidget == NULL)
  {
    return;
  }
  QPixmap screenshot;
  screenshot = QPixmap::grabWidget(activeWidget,activeWidget->rect());
  if(screenshot.isNull()){
    printf("ERROR");
  }
 bool a= screenshot.save("c:\\temp\\asd.jpg", "JPG", 50);

但不幸的是,这似乎不起作用。 有谁知道问题出在哪里?

【问题讨论】:

  • 是否打印“错误”(您的 printf..)?
  • 可能会发生很多事情,您在此处提供的代码没有明显问题。是否有任何被覆盖的 paintEvent() 函数,你从哪里调用它? grabWindow() 有效吗?
  • 调用 .save 后布尔变量 'a' 的值是多少?你确定你的代码被执行了吗?您是按按钮还是计时器调用它?通过放置 printf 并打印 'a' 的值来验证。
  • 嘿.. 我没有覆盖paintEvent()。不打印错误打印。并且 a 是假的。并且肯定会执行代码。
  • 好了,像素图保存部分坏了。 save() 应该在成功时返回 true。然而,保存本身似乎是正确的。目录是否存在,你有写权限吗?

标签: qt qwidget


【解决方案1】:

this answerthis forum post 中,人们提出以下建议:

很可能,您的应用程序找不到处理 .jpg 文件所需的插件。要解决此问题,请执行以下操作之一:

  • 如果您正在执行静态构建,请将 QTPLUGIN += qjpeg 添加到您的 .pro 文件中或
  • 如果您正在执行动态构建,请将来自 %QTDIR%\pluginsimageformats 文件夹放在您的 .exe 旁边

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2018-12-09
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多