web-dev-qa-db-ja.com

QMLのTextFieldにスタイルを適用するにはどうすればよいですか? 「スタイル」属性が利用できないようです

作業中の新しいqt5.7アプリケーションにいくつかのスタイルを適用しようとしていますが、以下はまったく機能しません。次のエラーが発生します。qrc:/SignInView.qml:67存在しないプロパティ "style"に割り当てることができません。同じ理由で、デザインモードで編集できません。

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.4

Page {
    id: page1
    ColumnLayout {
        id: columnLayout1
        height: 100
        anchors.right: parent.right
        anchors.left: parent.left
        anchors.top: parent.top

        Label {
            text: qsTr("Label")
            font.pointSize: 16
            horizontalAlignment: Text.AlignHCenter
            Layout.fillWidth: true
        }

        Image {
            id: image1
            width: 200
            height: 200
            Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
            fillMode: Image.PreserveAspectCrop
            anchors.horizontalCenter: parent
            source: "qrc:/qtquickplugin/images/template_image.png"

            Button {
                id: button1
                text: qsTr("Button")
                anchors.bottomMargin: 10
                anchors.rightMargin: 10
                anchors.bottom: parent.bottom
                anchors.right: parent.right
            }
        }

        Rectangle {
            id: field1
            width: 200
            height: 40
            color: "#ffffff"
            Layout.fillWidth: true



            Label {
                id: label1
                text: qsTr("Full Name")
                anchors.topMargin: 0
                anchors.left: parent.left
                anchors.leftMargin: 5
                anchors.top: parent.top
            }
            TextField {
                style: TextFieldStyle {
                    textColor: "black"
                    background: Rectangle {
                        radius: 2
                        implicitWidth: 100
                        implicitHeight: 24
                        border.color: "#333"
                        border.width: 1
                    }
                }
            }
        }
    }
}

私はこの例に従おうとしています:

http://doc.qt.io/qt-5/qml-qtquick-controls-styles-textfieldstyle.html

Qt Creatorのstyle属性で失敗し、styleが存在しないというエラーが発生します。ライブラリがロードされていないか、設定した環境が原因であると思います。ボタンや他の場所にもスタイルがありません。インポートがあればうまくいくと思いましたが、そうではありません。

SOに関連する問題はここにあります: QML-TextFieldフォントサイズを変更する方法 しかしここではうまくいくようです。

9
Encompass

Qt Quick Controls 2には、TextField::styleのようなプロパティはありません。一般に、Qtクイックコントロール1のスタイルオブジェクトをQtクイックコントロール2で使用する方法はありません。Qtクイックコントロールの2つのメジャーバージョン間のAPIには互換性がありません。詳細については、次のドキュメントページを参照してください。

新しいAPI互換のメジャーバージョンが導入されました。これは、Qt Quick Controls1のローダーベースのアーキテクチャを適度にうまく機能させる方法が基本的にないためです。したがって、Componentsの動的ロードはすべてQtクイックコントロール2で廃止されました。動的にロードされたスタイルオブジェクトによって提供されるComponentsから動的にインスタンス化されていたデリゲートは、代わりにコントロールの一部になりました。 「インプレース」でインスタンス化されます。本質的に:

TextField {
    style: TextFieldStyle {
        textColor: "white"
        background: Rectangle { color: "black" }
    }
}

vs.

TextField {
    color: "white"
    background: Rectangle { color: "black" }
}

あなたは歴史についてもっと読むことができます ここ 。特に、 この投稿 は、Qt Quick Controls2の基本的な構造変更を強調しています。

18
jpnurmi