2014-09-26 112 views
0

SpinBoxStyle from QtQuick.Controls.Styles允許您更改SpinBox的外觀,其中一部分是重新設計向上/向下箭頭按鈕的功能。然而,SpinBox和樣式都不能讓您查詢向上/向下箭頭按鈕的狀態,因此您無法檢查它是否被按下或懸停。SpinBoxStyle無法訪問按鈕狀態

這看起來太過疏忽了,所以​​我錯過了哪部分API文檔?

我試着給控制委託本身添加一個MouseArea,但有些原因它從來沒有收到任何事件 - 控件仍然工作,雖然這表明他們首先'竊取'事件。

SpinBox { 
    style: SpinBoxStyle { 
     incrementControl: Rectangle { 
      implicitHeight: 10 
      implicitWidth: 10 
      color: "blue" 

      MouseArea { 
       anchors.fill: parent 
       hoverEnabled: true 

       onEntered: console.log("Hello") // Never printed 
      } 
     } 
    } 
} 
+0

您是否在尋找http://qt-project.org/doc/qt-5/qml-qtquick-controls-spinbox.html#hovered-prop – Programmer 2014-09-26 13:36:38

+0

這是爲了懸停在整個控件上。我嘗試在我的控制委託中放置一個'MouseArea',並從中獲取事件,但它從不會觸發 - 另外還感覺有點駭人聽聞。無論如何,我會將代碼添加到我的問題中。 – cmannett85 2014-09-26 13:43:48

回答

2

Apparently你應該使用styleData性能檢測懸停和按下的狀態,但他們沒有記錄在案。請爲此創建一個錯誤報告。

import QtQuick 2.3 
import QtQuick.Controls 1.2 
import QtQuick.Controls.Styles 1.2 

SpinBox { 
    style: SpinBoxStyle { 
     incrementControl: Rectangle { 
      implicitHeight: 10 
      implicitWidth: 10 
      color: styleData.upHovered && !styleData.upPressed 
       ? Qt.lighter("blue") : (styleData.upPressed ? Qt.darker("blue") : "blue") 
     } 
    } 
} 

我不知道爲什麼風格是這種方式實現的,但如果你深入瞭解一下源代碼,你可以看到,總有MouseArea S爲上下控制。這對我來說非常混亂;如果你不應該提供一個交互式控制,因爲總是會有MouseArea的影子,爲什麼稱它爲incrementControldecrementControl?名稱如incrementdecrement可能就足夠了,因爲它們無法接收幾乎任何交互(至少點擊工作,出於某種原因)。如果您發現這有點令人困惑,那麼您可能還想爲API提交單獨的錯誤報告。

git log --follow -p表明自從引入樣式後,這段代碼並沒有太大的變化,所以我想說當前的實現(和API)只是過時了,希望將來有機會改進它。

+0

啊哈!我確實認爲我在'MenuStyle'中使用了'styleData'對象是很奇怪的,但'SpinBox'的文檔沒有提到它。在發佈問題之前,我查看了源代碼,但由於前面的下劃線,我只是忽略了'__styleData'。我現在將創建一個錯誤報告。謝謝! – cmannett85 2014-09-27 09:29:15

+1

此處記錄的錯誤:https://bugreports.qt-project.org/browse/QTBUG-41634希望關注的人員。 – cmannett85 2014-09-27 09:39:43