2012-04-09 10 views
3

QML-Farbverlauf ermöglicht nur von oben nach unten in einem Rechteck. Die documentation sagt, dass es durch Kombination von Rotation und Clipping getan werden muss.QML-Gradienten mit einer Ausrichtung

Ich habe gerade angefangen, QML (und wenig Erfahrung mit HTML/CSS) zu lernen. Hier ist mein Code, die ich denken kann, für viel besser verbessert werden:

import QtQuick 1.0 

Rectangle { 
    width: 400; height: 400; 

    Rectangle { 
    width: 567; height: 567; 

    gradient: Gradient { 
      GradientStop { 
     position: 0.0; 
     color: "white"; 
     } 
      GradientStop { 
     position: 1.0; 
     color: "blue"; 
     } 
    } 
    x: 116.5; 
    transformOrigin: Item.Top; 
    rotation: 45.0; 
    } 
} 

Können Sie bitte vorschlagen, was sind die besseren Möglichkeiten, dies zu tun?

Antwort

2

Ich fürchte, die Dokumentation ist korrekt. Der einzige andere Weg, an den ich denken kann, ist eine benutzerdefinierte QML-Komponente in C++ zu schreiben, die das tut, was Sie wollen.

Wenn Sie Qt/C++ Kenntnisse haben können Sie hier beginnen:

Das Rechteck könnte eine gute Vorlage oder Basisklasse sein:

5

Ich habe dieses probling mit dem folgenden Code lösen: https://code.google.com/p/ytd-meego/source/browse/trunk/playground/FeedBook/qmltube/HorizontalGradient.qml?r=144

Hier ist, was ich am Beispiel NielsMayer getan:

Rectangle { 
     width: parent.height 
     height: parent.width 
     anchors.centerIn: parent 
     rotation: 90 

     gradient: Gradient { 
      GradientStop { position: 0.0; color: "black" } 
      GradientStop { position: 1.0; color: "white" } 
     } 
    } 

Und dies gut funktioniert. Habe Spaß !

+0

In der Tat super Trick, funktioniert wie ein Charme! Ich habe das gleiche getan, jedoch vergessen, Anker hinzuzufügen - führen zu einigen unbedeckten Streifen. – Werolik

+0

Ich verstehe nicht, wie funktioniert das für Sie? Wenn Sie das * Child * Rectangle * DREHEN *, dann wird es außerhalb des * Parent * Rectangle gehen. Und das funktioniert genau so, wie ich es für mich gesagt habe: http://storage2.static.itmages.com/i/17/0802/h_1501648599_3384672_6ac0b27d3e.png Es ist ein nicht-robuster Trick. Es funktioniert nicht in allen Fällen wie LinearGradient. – general656

3

Das Modul Qt Graphical Effects, das in Qt 5.1 eingeführt wurde, bietet drei Gradiententypen. Mit dem Element (Effekt) LinearGradient ist es nicht länger notwendig, eine Drehung anzuwenden, um horizontale Farbverläufe zu erzielen. Insbesondere LinearGradient ermöglicht jeder Gradient Richtung mit Hilfe seiner start und end Punkt (Attribute).

import QtQuick 2.0 
import QtGraphicalEffects 1.0 

Item { 
    width: 300 
    height: 300 

    LinearGradient { 
     anchors.fill: parent 
     start: Qt.point(0, 0) 
     end: Qt.point(0, 300) 
     gradient: Gradient { 
      GradientStop { position: 0.0; color: "white" } 
      GradientStop { position: 1.0; color: "black" } 
     } 
    } 
}