【问题标题】:view image on button click. qt单击按钮查看图像。 qt
【发布时间】:2012-12-02 19:11:20
【问题描述】:

我在主窗口中创建了一个标签,其大小设置为 200x300px。现在单击按钮,我需要查看其中的图像。这里是按钮的槽函数。

 void MainWindow::function1(){
QImage img;
img.loadFromData("test.jpg");
img = img.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation);
label->setPixmap(QPixmap::fromImage(img));
}

问题是编译没有错误,但不显示图像。按下按钮时会在 IDE 中显示 QImage::scaled: Image is a null image 我是qt的新手。我会非常感谢任何建议。

谢谢

【问题讨论】:

    标签: c++ image qt pixmap


    【解决方案1】:

    而不是

    img.loadFromData("test.jpg");

    使用

    img.load("test.jpg");

    如果您从 QIODevice 加载。

    【讨论】:

      【解决方案2】:

      如果您在 GUI 线程之外处理图像,则必须使用 QImage。此外,loadFromData() 函数看起来像是用于传递大量字节数组,而不是文件名。

      这是我将如何使用 QPixmap 来实现的。

      QPixmap pix;
      
      bool loaded = pix.load("test.jpg");
      
      if(loaded == false)
      {
          label->setText("Failed to load test.jpg from" + QDir::currentPath());
      }
      else
      {
          pix = pix.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation);
          label->setPixmap(pix);
      }
      

      您可能还想将 200 和 300 替换为 label->width()label->height()。以这种方式缩放像素图看起来最好,但您也可以只设置像素图,然后使用label->setScaledContents(true)

      【讨论】:

      • 感谢这项工作。但是当我在我的代码中替换 img.load("test.jpg") 时它不起作用。这里有什么错误。
      • 我猜这与找不到文件、未正确自动检测格式或未找到用于处理 jpg 的 QImage 的 dll 有关。当您准备好部署它时,您可能需要确保在您的 exe 目录中具有从“QTDIR/plugins”复制的“/imageformats/qjpeg4.dll”。如果您检查函数调用的返回值,您可以查看它是否无法加载或无法缩放,或者是否是其他原因。有时 Qt 也会在运行时将错误放在输出中。
      猜你喜欢
      • 2012-06-24
      • 2011-08-14
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 2013-12-25
      • 2017-01-21
      相关资源
      最近更新 更多