丢失文件的QPixmap创建调试消息

时间:2016-10-26 14:21:02

标签: c++ qt qt4.8

我正在使用嵌入式Linux系统上的Qt 4.8.6 GUI。 GUI通过调用:

加载大量图像
QPixmap( "/path/to/file.png" )

但是,如果找不到该文件,Qt将不会在调试输出上发出警告或错误。这就是我想要实现的,在调试和发布版本上更受欢迎。

我提出了一个解决方案,我用自己的方法重载QPixmap构造函数并进行文件检查。

class QPixmapExtended : public QPixmap
{
public:
    QPixmapExtended(const QString& fileName) : QPixmap( fileName )
    {
        if( !QFile::exists( fileName ) )
        {
            qDebug() << "File not found: " << fileName;
        }
    }
};

但是我想知道这个问题是否有更聪明的解决方案

谢谢和欢呼,马丁

2 个答案:

答案 0 :(得分:0)

也许默认构造QPixmap,然后调用QPixmap :: load()可能是一个选项,有一个布尔返回值,告诉你调用是否成功。

为了获得dropin替换,我相信你正在寻找,你可以将其封装到一个全局可访问的功能中:

QPixmap loadPixmap(const QString& filename) {
      QPixmap result;
      if (!result.load(filename)) {
         // print error message
      }
      return result;
}

由于Qt内部共享图像数据,因此按值返回QPixmap并不是太多问题。

答案 1 :(得分:0)

迭代pixmaps并检查其中是否有任何加载失败:typedef enum { p_upArrow, p_downArrow } PixmapSymbol; struct Entry { PixmapSymbol symbol; const char * filename; }; Entry const entries[] = { { p_upArrow, "/path/UpArrow.png" }, { p_downArrow, "/path/DownArrow.png" } }; QMap<PixmapSymbol, QPixmap> void loadPixmaps() { QMap<PixmapSymbol, QPixmap> pixmaps; for (auto & entry : entries) { auto pixmap = QPixmap{QString::fromUtf8(entry.filename)}; pixmaps.insert(entry.symbol, pixmap); if (pixmap.isNull()) qDebug() << "Failed to load pixmap" << entry.filename; } }; int main(int argc, char ** argv) { QApplication app{argc, argv}; auto const pixmaps = loadPixmaps(); QLabel ui; ui.setPixmap(pixmaps[p_upArrow]); ui.show(); return app.exec(); } 会告诉您某个pixmap无法加载。

您可能应该在符号,文件名和像素图之间进行某种映射。 E.g:

MOVF file,d