我正在使用嵌入式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;
}
}
};
但是我想知道这个问题是否有更聪明的解决方案?
谢谢和欢呼,马丁
答案 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