我正在创建小型图形用户界面系统,我想从Python代码中获取原始字节形式的图像,然后使用这些原始字节创建QImage/QIcon.对于C++/Python交互,我使用Boost Python.
在Python代码端,我打印了原始字节: b ' x89 PNG ' r\n\x1a ' n\x00/x00/x00/x00@\x00,x00,x00,x00@\x08,x02,x00,x00,x00,x00%,x0b,xe6,x89,x00,x00,x00,x000 x03sBIT\x08\x08\x08\xdb\xe1O\xe00\x00\x00\x00\x00\tpHys\x00\x0 0.x0e/xc4/x00/x00/x0e/xc4/x01/x95 +\x0e/x1b/x00\x00/x06/xabIDATh/x81/xed/x9aOh/x13O/x14/xc7wv/x93/xdd/xfcQ1/xa9/x8d.
我将它们作为字符串从Python发送到C++代码,就像:
data.rawBytes = str(thumbnail._raw_bytes)
在C++端,我以字符串的形式提取这些字节:
std::string rawBytes = boost::python::extract<std::string>(obj.attr("rawBytes"));
上面在C++端收到的rawstival与上面的Python打印相同.
现在在UI代码中,我try 使用这些原始字节来创建QIcon,就像:
std::string rawbytes = data.rawBytes;
QByteArray arr();
arr.append(rawbytes.c_str(), rawbytes.length());
bool flag = pixmap.loadFromData(arr, "PNG");
QStandardItem* item = new QStandardItem(name);
item->setIcon(QIcon(pixmap));
图标不会显示在UI中,此外,从pixmap.loadFromData返回的"标志"为假,这意味着原始字节的转换存在一些问题.有人能指出是否需要进行某种从Python到c++代码的转换才能在UI上正确呈现此图像吗?