QML中的width/height
和implicitWidth/Height
之間的區別是什麼?什麼時候應該設置隱式維度而不是常規?什麼時候應該從組件/項目中詢問隱式維度而不是常規?QML中寬度,高度和隱式寬度/高度與相應用例之間的區別
回答
通常,implicitHeight/Width
的使用僅在可重用組件中有意義。
它給出了一個提示,該項目的自然大小沒有強制執行此大小。
讓我們以Image
爲例。圖像的自然大小會將圖像文件中的一個像素映射到屏幕上的一個像素。但它允許我們伸展它,所以尺寸不被執行並且可以被覆蓋。
現在我們來說說,我們希望有一個畫廊有未知維度的圖片,我們不想增長,但只有在必要時才縮小它們。所以我們需要存儲圖像的自然大小。也就是說,隱含的高度起作用。
Image {
width: Math.max(150, implicitWidth)
height: Math.max(150, implicitHeight)
}
在自定義組件中,您可以選擇如何定義尺寸。
的一個選擇是,以具有相對於所述部件root
-node,也許這樣所有維度:
Item {
id: root
Rectangle {
width: root.width * 0.2
height: root.height * 0.2
color: 'red'
}
Rectangle {
x: 0.2 * root.width
y: 0.2 * root.height
width: root.width * 0.8
height: root.height * 0.8
color: 'green'
}
}
在這種情況下,存在該對象的沒有自然的尺寸。對於爲組件設置的每個尺寸,一切都完美無缺。另一方面,你可能有一個物體,它有一個自然的大小 - 發生,例如,如果你在它
Item {
id: root
property alias model: repeater.model
Repeater {
id: repeater
delegate: Rectangle {
width: 100
height: 100
x: 102 * index
y: 102 * index
}
}
}
絕對值在這個例子中,你應該提供有關自然大小,其中內容不protude項目信息的用戶。用戶可能仍然決定設置較小的尺寸並處理突起,例如,通過剪切它,但他需要關於自然尺寸的信息來做出他的決定。
在很多情況下,childrenRect.height/width
是implcitHeight/Width
的一個很好的衡量標準,但有一些例子,這不是一個好主意。 - 例如當該物品的內容有x: -500
時。
一個現實生活中的例子是Flickable
,它被專門設計用於包含大於其自身尺寸的對象。使Flickable
的大小等於內容將不自然。
在自定義組件中使用scale
時也要小心,因爲childrenRect不會了解縮放比例。
Item {
id: root
implicitWidth: child.width * child.scale
implicitHeight: child.height * child.scale
Rectangle {
id: child
width: 100
height: 100
scale: 3
color: 'red'
}
}
並以您的評論:我只是不明白爲什麼它是最好設置implicitWidth /高度,而不是設置組件的根尺寸的寬度/高度。
implicitWidht/Height
不是一個必需品--QtQuick沒有它們就可以做到。它們是爲了方便而存在的,應該是約定。
拇指
當你想設置一個可重用的組件的根節點的尺寸的規則,設定
implicitWidth/Height
。
在某些情況下,如果節點作爲屬性公開,請將其設置爲非根節點。
這樣做,如果你有一個原因(許多官方組件來沒有任何)。
當您使用組件時,請設置width/height
。
我沒有明確的答案,但我可以告訴你我發現了什麼。首先,from the documentation:
implicitWidth:如果沒有指定寬度或高度 是真正
定義項目的自然寬度或高度。
默認隱含尺寸對於大多數項爲0x0,然而,一些物品 具有不能被重寫,用於 例如,
Image
和Text
固有隱含尺寸。
寬度
定義項目的位置和大小。
width
和height
反映場景中物品的實際尺寸。隱含大小是項目本身的某種固有屬性。
我使用它們如下:當我創建一個新的項,它可以被調整大小,我設置一個隱含的大小內部對象。當我使用該對象時,我經常從外部明確設置實際尺寸。
對象的隱式大小可以通過設置高度和寬度來覆蓋。
一個例子:TextWithBackground.qml
Item {
implicitWidth: text.implicitWidth
implicitHeight: text.implicitHeight
// the rectangle will expand to the real size of the item
Rectangle { anchors.fill: parent; color: "yellow" }
Text { id: text; text: "Lorem ipsum dolor..." }
}
一個例子:MyWindow.qml
Item {
width: 400
height: 300
TextWithBackground {
// half of the scene, but never smaller than its implicitWidth
width: Math.max(parent.width/2, implicitWidth)
// the height of the element is equal to implicitHeight
// because height is not explicitly set
}
}
1)對於某些元素,例如文本,隱式高度取決於(非隱式)寬度。
2)隱含大小通常取決於其子女的隱含大小。
- 1. Html畫布:寬度/高度屬性與寬度/高度風格之間的區別
- 2. 高度和寬度
- 3. Android |獲取屏幕高度,寬度和屏幕寬度,高度
- 4. ImageButton的高度和寬度
- 5. 設置高度與寬度
- 6. WPF高度/寬度
- 7. autoresizingmask高度和寬度
- 8. Youtube寬度和高度
- 9. libgdx optimal高度和寬度
- 10. setBound寬度和高度
- 11. 獲取高度和寬度
- 12. WP7組圖片元件高度/寬度的BitmapImage高度/寬度
- 13. Android相機高度和寬度
- 14. 圖片的高度,寬度和格式
- 15. 將WPF寬度/高度轉換爲VB 6寬度/高度
- 16. 圓與高度100%和匹配寬度
- 17. Unslider問題與高度和寬度
- 18. jQuery的高度()寬度()
- 19. Silverlight中的最大寬度和高度
- 20. DOMPDF中定製的寬度和高度
- 21. Xamarin.Android中rootView的高度和寬度
- 22. 集DockPanel中的寬度和高度作爲相同WPF窗口的寬度和高度
- 23. 寬度等於高度
- 24. ViewPager動態寬度高度
- 25. MediaStore get Image高度/寬度
- 26. 計算器高度寬度
- 27. 100%高度或100%寬度
- 28. 按鈕寬度,高度
- 29. 匹配中間和長度×寬度×高度的端
- 30. 設置按鈕的高度與寬度
偉大的問題!我一直在努力爭取這一點! –
優秀!當QML開始時,很多人都爲此感到困惑。 – derM