QML与系统主题配合不好

时间:2019-02-10 15:16:47

标签: python qt qml pyqt5

我有一个非常基本的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似乎不一致地选择了深色主题:文字颜色发生变化,但背景并非总是如此。因此,我在TextFieldButton中得到了一些难以理解的颜色(在白色背景上显示白色文本)。 Label没有问题。

PyQt5 PyQt5 qmlscene qmlscene

对于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。经过这一更改,我得到了正确的行为。

所以这个问题似乎已经解决了,但是我真的不明白为什么。我只发现QApplicationQGuiApplication的子类。有人可以解释为什么只有其中一个看起来可以正常工作吗?

此外,我还不知道这是Qt的一般问题还是与Python相关的问题。尽管PyQt5和PySide2表现出相同的行为,但也许是一般的事情?

0 个答案:

没有答案