2016-08-20 5 views
4

Я пытаюсь применить некоторые стили к новому приложению qt 5.7, над которым я работаю, и следующее не работает вообще. Он дает ошибку: qrc: /SignInView.qml: 67 Невозможно назначить несуществующий «стиль» И я не могу редактировать его в режиме разработки по тем же причинам.Как применить стиль к TextField в QML? Кажется, что атрибут «стиль» недоступен

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 дает ошибку, что стиль не существует. Я предполагаю, что это что-то с моими библиотеками, не загружаемыми или, возможно, средой, которую я установил. У меня нет стиля в пуговицах или в другом месте. Я предположил, что если у меня будет импорт, он будет работать, но это не так.

Связанная с этим проблема на SO здесь: QML - How to change TextField font size Но здесь это просто работает.

ответ

15

В Qt Quick Controls 2 отсутствует такая собственность, как TextField::style. В общем, нет возможности использовать объекты стиля из Qt Quick Controls 1 с помощью Qt Quick Controls 2. API-интерфейсы между двумя основными версиями Qt Quick Controls несовместимы. На следующих страницах документации для получения более подробной информации:

Нового API-несовместимого основная версия была введена, потому что нет в принципе никакого способа, чтобы сделать тяжело Архитектура Qt Quick Controls, основанная на загрузчиках, работает достаточно хорошо. Поэтому вся эта динамическая загрузка Component s была удалена в Qt Quick Controls 2. Делегаты, которые ранее были динамически созданы из Component, предоставленные динамически загруженным объектом стиля, теперь являются частью элемента управления, а затем создаются «на месте». По сути:

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

против

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

Вы можете прочитать больше об истории here. В частности, this post подчеркивает фундаментальные структурные изменения в Qt Quick Controls 2.