如何将图像加载到painter.drawimage函数

how to load image to painter.drawimage function

本文关键字:painter drawimage 函数 加载 图像      更新时间:2023-10-16

我已将图像存储在板本地目录(/home/images/system/image.png)中

对于painter.drawimage函数,传递Qpoint和Qimage作为参数。

painter.drawImage(QRect(100, 50, 100, 100), QImage("home/images/system/image.png"));

我可以在这里直接使用图像的路径吗??如果我像这样加载,它就不起作用这是传递存储在板目录中的图像路径的正确方式吗?

您可以看到位置和您试图加载的路径之间的不一致:

我已将图像存储在板本地目录(/home/images/system/image.png)中

然后:

painter.drawImage(QRect(100, 50, 100, 100), QImage("home/images/system/image.png"))

您缺少绝对路径的前导斜杠。为什么你的程序目前不起作用,是因为程序正在寻找相对于应用程序的图像,而不是绝对路径。

解决方案是对上述线路进行小的修复,如下所示:

painter.drawImage(QRect(100, 50, 100, 100), QImage("/home/images/system/image.png"))
^

然而,这只是一个快速的解决方法。在理想的情况下,您不会真正加载这样的图像,尤其是不会从与运行应用程序的用户不同的主文件夹加载图像。

如果您使用相同用户的主目录,则不会使用硬编码路径,而是使用QStandardPaths中的以下选项:

QStandardPaths::HomeLocation    8   Returns the user's home directory.

除非真的有必要,否则硬编码一条长的绝对路径是一种非常糟糕的做法,但这是罕见的。

或者,您也可以将图像放在应用程序旁边,并以以下方式加载:

painter.drawImage(QRect(100, 50, 100, 100),
QImage(QString("%1/image.png")
.arg(QCoreApplication::applicationDirPath()));

根据此方法的QCoreApplication文档。

我可能会坚持使用最新的选项,或者至少使用前面提到的没有硬编码的主路径。

当然,您也可以始终使用Qt资源系统,但我认为在这种简单的情况下,这会有点过分,除非您想将映像捆绑在一起,这样您就不需要单独部署它。在这种情况下,你会写这样的东西:

painter.drawImage(QRect(100, 50, 100, 100), QImage(":/image.png"));

您将在.proqmake文件中拥有如下资源文件:

RESOURCES += myresourcefile.qrc

资源文件将包含如下内容:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>image.png</file>
</qresource>
</RCC>
  1. 缺少前斜杠
  2. 在绘制事件中加载图像是一种糟糕的方法
  3. 试试这个:

QImage img("/home/images/system/image.png");
Q_ASSERT(!img.isNull());
painter.drawImage(QRect(100, 50, 100, 100), img);

而不是

painter.drawImage(QRect(100, 50, 100, 100), QImage("/home/images/system/charge1.png"));

你可以使用

QImage image("home/images/system/charge1.png");
painter.drawImage(rect, image);

在文档中,您可以看到

QRectF target(10.0, 20.0, 80.0, 60.0);
QRectF source(0.0, 0.0, 70.0, 40.0);
QImage image(":/images/myImage.png");
QPainter painter(this);
painter.drawImage(target, image, source);

在链接中:http://qt-project.org/doc/qt-4.8/qpainter.html#drawImage-5

此外,我建议您使用Qt:中的资源文件

  • http://qt-project.org/doc/qt-5.0/qtcore/resources.html
  • http://qt-project.org/doc/qt-4.8/designer-resources.html