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

时间:2016-05-31 06:44:25

标签: python pyside

我有:

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文件加载得很好。这让我有点困惑。

1 个答案:

答案 0 :(得分:2)

查看QUILoader::load的文档,它的第一个参数是 QIODevice ,它基本上是一个可以处理任何数据块的接口类,如QFile, Q缓冲器。

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