Merhaba arkadaşlar, kısa bir QT kod parçası yazısı ile karşınızdayım. Aslında bu yazımın çıkış noktası qt forumlarında karşılaştığım bir soru oldu. Soru aslında temelde QML betik kodu içerisinde herhangi bir görsel bileşenin rengine göre bir aksiyon alma, daha doğrusu koşul olarak kontrol etmeye dayalıydı. Bu arada sorunun orjinaline aşağıdaki bağlantıdan ulaşabilirsiniz:
https://forum.qt.io/topic/111237/is-it-possible-to-set-condition-base-on-color-for-onclicked
Burada değinmek istediğim API Qt.colorEqual(). QML’de renkleri karşılaştırırken eşitlik operatörünü kullanası geliyor insanın ama bunun işe yaramadığını hızlı bir şekilde görebilirsiniz. Renkleri karşılaştırmak için (ihtiyaçtan bağımsız konuşuyorum) kullanmanız gereken API bu.
Aşağıya da taşıdığım kod parçasında hem bu API hem de QML içerisinde “States” özelliğinin nasıl kullandığını görebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import QtQuick 2.12 import QtQuick.Window 2.12 Window { visible: true width: 270 height: 270 title: qsTr("Hello World") Rectangle { id: rect1 x: 20; y: 20 width: 100; height: 100 state:"blueState" MouseArea { anchors.fill: parent onClicked: rect1.state == "redState"?rect1.state="blueState":rect1.state="redState" } states: [ State { name: "redState"; PropertyChanges { target: rect1; color: "red"; }}, State { name: "blueState"; PropertyChanges { target: rect1; color: "blue"; } } ] } Rectangle { id: rect2 x: 150; y: 20 width: 100; height: 100 state:"blueState" MouseArea { anchors.fill: parent onClicked: rect2.state == "redState"?rect2.state="blueState":rect2.state="redState" } states: [ State { name: "redState"; PropertyChanges { target: rect2; color: "red"; }}, State { name: "blueState"; PropertyChanges { target: rect2; color: "blue"; } } ] } Rectangle { id: rect3 x: 85; y: 150 width: 100; height: 100 state:"blueState" MouseArea { anchors.fill: parent onClicked: { // Only change state when two other rectangle color is red if (rect1.state == "redState" && rect2.state=="redState") { rect3.state == "redState"?rect3.state="blueState":rect3.state="redState" } } } states: [ State { name: "redState"; PropertyChanges { target: rect3; color: "red"; }}, State { name: "blueState"; PropertyChanges { target: rect3; color: "blue"; } } ] } } |
Bir sonraki yazımda görüşmek dileğiyle dostlar, kendinize iyi bakın. Bu sefer gerçekten kısa oldu ne dersiniz 🙂