Qt quick ApplicationWindow 'color' для цвета фона не работает

Я создал простое быстрое приложение Qt с одним файлом main.qml, код которого похож на приведенный ниже. Проблема в том, что цвет фона окна не был установлен на #ffffff, вместо этого он установлен на светло-серый (я думал, что цвет окна по умолчанию в Windows). Цвет прямоугольника установлен правильно.

Я использую Qt Creator 3.3.1 (с открытым исходным кодом) на основе Qt 5.4.1 для Windows.

import QtQuick 2.4
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.3
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2

ApplicationWindow {
    title: qsTr("Hello")
    width: 200
    height: 200
    visible: true
    color: "#FFFFFF"

    Rectangle {
        id: rectangle1
        width: 100
        height: 100
        color: "#ffffff"
    }
}

person zhangwt    schedule 04.03.2015    source источник


Ответы (1)


ApplicationWindowStyle Тип QML обеспечивает стиль для ApplicationWindow. По умолчанию ApplicationWindowStyle представляет фон как:

background: Rectangle {
        visible: !styleData.hasColor
        color: SystemPaletteSingleton.window(true)
}

styleData.hasColor свойство определяется как:

property QtObject styleData: QtObject {
    readonly property bool hasColor: window.color != "#ffffff"
}

Итак, если ваш ApplicationWindow цвет равен #FFFFFF, вы видите светло-серый прямоугольник на фоне окна.

Чтобы сделать белый фон, вам нужно установить пользовательский ApplicationWindowStyle.

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    style: ApplicationWindowStyle {
        background: Rectangle {
            color: "#FFFFFF"
        }
    }
}
person Meefte    schedule 04.03.2015
comment
Спасибо, что объяснили, как это работает. Кстати, любое предложение, где я мог бы найти такие подробности на веб-сайте Qt doc или других. Я немного поискал, прежде чем задать этот вопрос, но не нашел ничего полезного. Я новичок в Qt :) спасибо. - person zhangwt; 05.03.2015
comment
@zhangwt Исходный код Qt можно посмотреть на gitorious. - person Meefte; 05.03.2015
comment
Нормально ли, что Qt Designer не распознает эти свойства? Текстовый редактор продолжает помечать «стиль» как недопустимое имя свойства, и дизайнер QMLJS больше не будет отображать макет. Однако, когда я его компилирую, он работает нормально. - person Daniel Saner; 13.03.2015
comment
@Daniel Saner http://stackoverflow.com/q/28899984/2792656 - person Meefte; 13.03.2015
comment
@DanielSaner Использование import QtQuick.Controls.Styles 1.4 решило для меня проблему нераспознанного свойства (ранее я использовал 1.2). - person mrAlmond; 03.07.2018