首页 > 解决方案 > QML 不能很好地与系统主题配合使用

问题描述

我有一个非常基本的 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因此,我在and中得到了一些不可读的颜色Button(在白色背景上显示白色文本)。然而Label没有问题。

PyQt5 PyQt5 qmlsceneqmlscene

对于 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 表现出相同的行为,所以也许是一般的事情?

标签: pythonqtqmlpyqt5

解决方案


推荐阅读