【问题标题】:QLabel load image from fileQLabel 从文件中加载图像
【发布时间】:2019-01-29 08:50:10
【问题描述】:

我使用 Qt 资源系统来加载图像。

但资源收集文件 (.qrc) 只有 20MB

所以我尝试使用 QImage::loadFromData 加载图像以供我的应用程序使用。

但是对于我使用的资源收集文件 (.qrc)

QImage image0(":/images/dashboard_n.png");

加载图片。

如何使用QImage::loadFromData加载图片

qrc如何使用相对路径?

而且我无法编译和更新 terminal.qrc。

【问题讨论】:

    标签: c++ qt5 qimage qlabel


    【解决方案1】:

    通常将 image.png 文件放在 *.qrc 所在的目录中,例如这样:

    ${Project_Resource_Directory}/images/dashboard_n.png
    

    .qrc 文件将被放置在这里:

    ${Project_Resource_Directory}/resources.qrc
    

    您的 .qrc 文件应如下所示:

    <RCC>
         <qresource prefix="/">
             <file>images/dashboard_n.png</file>
         </qresource>
    </RCC>
    

    将此代码放入您的 .pro 文件中:

    RESOURCES += ${Project_Resource_Directory}/resources.qrc
    

    在你的项目结构中替换你的资源目录名称而不是 ${Project_Resource_Directory} 以便 Qt 可以检测到你的 *.qrc 文件并使用 rcc 将它们编译为 c 代码

    那么你可以在你的任何 cpp 代码中使用这个地址:

    ":/images/dashboard_n.png"
    

    【讨论】:

    • 感谢您的回答,但是 Project_Resource_Directory 我可以像 RESOURCES += ${C:/Users/user/Desktop/qrc}/terminal.qrc 这样设置桌面 如何使用 rcc 进行编译。
    • 不,您必须将其替换为整个 ${...} 它就像:'RESOURCES += C:/Users/user/Desktop/qrc/terminal.qrc' 的绝对或相对路径.qrc 文件,然后 qt 将检测资源并使用 rcc 自动编译它,通常您不必手动执行此操作
    【解决方案2】:

    这是一个使用 loadFromData 加载到 QPixmap 的简单示例。您可以以相同的方式加载到 qimage,但无论如何您都必须将其转换为 pixmap 才能将其加载到 qlabel

     QByteArray *temp = new QByteArray();
     QFile *file = new QFile("image.png");
     file->open(QIODevice::ReadOnly);
     *temp = file->readAll();
     QPixmap *pix = new QPixmap();
     pix->loadFromData(*temp);
     label->setPixmap(*pix);
    

    【讨论】:

    • 我可以把 image.png 放在哪里吗?对于它放在 qt 文件中的资源收集文件 (.qrc)。
    • 是的,或者在某个文件夹中,您可以这样添加它:doc.qt.io/archives/qt-4.8/resources.html
    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多