我有一个非常基本的QML文件:
import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
visible: true
width: 100
height: 100
title: 'Hello World'
Column {
TextField {
id: text
width: parent.width
text: 'Text Field'
}
Button {
text: 'Button'
}
Label {
text: 'Label'
}
}
}
但是,在PyQt5和qmlscene中运行它时,会得到不同的结果:
我为桌面设置了一个黑暗的主题,并且qmlscene可以正常工作。但是使用PyQt5似乎不一致地选择了深色主题:文字颜色发生变化,但背景并非总是如此。因此,我在TextField
和Button
中得到了一些难以理解的颜色(在白色背景上显示白色文本)。 Label
没有问题。
对于Python部分,我有:
import sys
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtQml import QQmlApplicationEngine
# Create the application instance and a QML Engine
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl('test.qml'))
engine.quit.connect(app.quit)
sys.exit(app.exec_())
这是怎么回事?我该如何解决?
如建议的那样,我看了一下qmlscene的代码,偶然发现了两个区别:首先,它使用QQuickView
而不是QQmlApplicationEngine
,但似乎没有任何作用这里。另一个正在使用QApplication
而不是QGuiApplication
。经过这一更改,我得到了正确的行为。
所以这个问题似乎已经解决了,但是我真的不明白为什么。我只发现QApplication
是QGuiApplication
的子类。有人可以解释为什么只有其中一个看起来可以正常工作吗?
此外,我还不知道这是Qt的一般问题还是与Python相关的问题。尽管PyQt5和PySide2表现出相同的行为,但也许是一般的事情?