QtUiTools.QUiLoader() 是否出于某种原因需要 QFile 作为输入?

Does QtUiTools.QUiLoader() require QFile as input for some reason?

我有:

from PySide import QtGui, QtUiTools

有什么区别:

ui_file = QtCore.QFile('my_ui.ui')
ui_file.open(QtCore.QFile.ReadOnly)
my_ui = QtUiTools.QUiLoader().load(ui_file)
ui_file.close()

和:

self.ui = QtUiTools.QUiLoader().load('my_ui.ui')

?

我问是因为后者看起来简单得多,而且它似乎和第一段代码一样好用。我用谷歌搜索了第一段代码,错误地没有正确实现它,但是 .ui 文件加载得很好。这让我有点困惑。

查看 QUILoader::load 的文档,它以 QIODevice 作为第一个参数,它基本上是一个接口 class 可以处理任何数据块,例如 QFile、QBuffer。

quiloader.cpp 中,您可以看到它试图打开设备并读取其中的内容。基本上你的第一个解决方案不需要打开文件。

QWidget *QUiLoader::load(QIODevice *device, QWidget *parentWidget)
{
Q_D(QUiLoader);
if (!device->isOpen())
    device->open(QIODevice::ReadOnly|QIODevice::Text);
return d->builder.load(device, parentWidget);
}

sourcecode