QML - не может назначить несуществующий "стиль" свойства,

Я использую Qt 5.10.1 с Qt Creator 4.5.1, а свойство style никогда не доступно в элементах.

Например, как показано здесь ButtonStyle QML Type, я хотел бы сделать:

Button {
    text: "A button"
    style: ButtonStyle {...}
}

Но я получаю ошибку:

Невозможно присвоить несуществующему свойству "стиль"

Я попытался с прямоangularьником, прогрессбаром, и я получаю ту же ошибку.

Изменить № 1:

У меня есть весь этот импорт. Если импорт отсутствует, я получаю сообщение об ошибке в ButtonStyle, но это ошибка в стиле.

import QtQuick 2.2
import QtQuick.Controls 2.3
import QtQuick.Dialogs 1.0
import QtGraphicalEffects 1.0
import QtQuick.Shapes 1.0
import QtQuick.Layouts 1.3
import QtQuick.Controls.Styles 1.4

Ответы

Ответ 1

В QML есть 2 типа кнопок:

В вашем случае вы импортируете кнопку Qt QuickControls 2: import QtQuick.Controls 2.3, и эта кнопка не имеет атрибута style.

Если вам нужно использовать стиль, вы должны импортировать:

import QtQuick.Controls 1.4

вместо:

import QtQuick.Controls 2.3

Если вы используете элементы из Qt Quick Control и Qt Quick Control 2, вы можете разделить их, используя пространство имен:

import QtQuick.Controls 2.3 as QQC2
import QtQuick.Controls 1.4 as QQC1

QQC1.Button {
    text: "A button"
    style: ButtonStyle {...}
}

QQC2.another_item_of_Qt_Quick_Controls2{
}

Ответ 2

Обязательно импортируйте QtQuick.Controls.Styles

import QtQuick.Controls.Styles 1.4
Button {
    text: "A button"
    style: ButtonStyle {...}
}

Ответ 3

Вы можете настроить кнопку Qt Quick Controls 2, изменив два ее визуальных элемента: фон и элемент содержимого:

https://doc.qt.io/qt-5/qtquickcontrols2-customize.html#customizing-button

import QtQuick 2.12
import QtQuick.Controls 2.12

Button {
    id: control
    text: qsTr("Button")

    contentItem: Text {
        text: control.text
        font: control.font
        opacity: enabled ? 1.0 : 0.3
        color: control.down ? "#17a81a" : "#21be2b"
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        elide: Text.ElideRight
    }

    background: Rectangle {
        implicitWidth: 100
        implicitHeight: 40
        opacity: enabled ? 1 : 0.3
        border.color: control.down ? "#17a81a" : "#21be2b"
        border.width: 1
        radius: 2
    }
}