- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经将图像存储在板本地目录(/home/images/system/image.png)
对于 painter.drawimage 函数,将 Qpoint 和 Qimage 作为参数传递。
painter.drawImage(QRect(100, 50, 100, 100), QImage("home/images/system/image.png"));
我可以在这里直接使用图片路径吗??如果我这样加载它不起作用这是传递存储在板目录中的图像路径的正确方法吗?
最佳答案
您可以自己看到位置和您尝试加载的路径之间的不一致:
I have stored the images in board local directory(/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 documentation for this method .
我可能会坚持使用最新的选项,或者至少坚持前面提到的没有硬编码的主路径。
当然,您始终可以使用 Qt resource system同样,但我认为在这种简单的情况下,这会有点过分,除非您希望将图像捆绑在一起,这样您就不需要单独部署它。在这种情况下,您将编写如下内容:
painter.drawImage(QRect(100, 50, 100, 100), QImage(":/image.png"));
您的 .pro qmake 文件中的资源文件如下:
RESOURCES += myresourcefile.qrc
资源文件将包含如下内容:
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>image.png</file>
</qresource>
</RCC>
关于c++ - 如何将图像加载到 painter.drawimage 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089327/
我是一名优秀的程序员,十分优秀!