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);
}
我有:
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);
}