這裏是我的測試代碼:如何在強制固定寬高比時停止窗口大小跳動?
import QtQuick 2.4
import QtQuick.Window 2.2
Window {
visible: true
readonly property int defaultWidth: 700
readonly property int defaultHeight: 500
width: defaultWidth
height: defaultHeight
readonly property real aspectRatio: defaultWidth/defaultHeight
readonly property real scaleFactor: width/defaultWidth
onWidthChanged: {
var properHeight = Math.round(width/aspectRatio);
if (height !== properHeight) {
height = properHeight
}
}
onHeightChanged: {
var properWidth = Math.round(height * aspectRatio);
if (width !== properWidth) {
width = properWidth
}
}
TextEdit {
id: textEdit
text: "Lorem ipsum"
font.pixelSize: 40 * scaleFactor
anchors.fill: parent
}
}
它實現固定縱橫比,但它並不能很好地工作:有幾分固定縱橫比的大小和鼠標器之間閃爍(窗口大小的跳躍調整後的大小),並且可以根據寬度和高度變化事件的順序來調整錯誤的尺寸。實際上,當以編程方式調整大小時,窗口邊緣可能會在鼠標光標位置和編程設置的不同位置之間開始跳轉。
什麼應該發生時,它被拖動應遵循的鼠標光標(如在任何大小調整)的窗口邊緣,而另一個邊緣應改變,以保持高寬比:
- 如果用戶拖動左/右邊緣,底部邊緣應移動以保持寬高比。
- 如果用戶拖動上/下邊緣,則右邊緣也應移動以保持寬高比。
- 當用戶拖動一個角落裏,有兩種可能的大小取,以保持高寬比,如高度或寬度可以被編程改變。如何確定這一點並不重要,只要它是一致的即可。
- 沒問題,如果寬高比只有在調整大小停止後才固定,但實時會更好。但如何可靠地檢測調整大小實際上停止?
- 如果不能使用Qt獨自完成,我感興趣的是Windows和X11/Linux的具體解決方案。
如何實現調整大小,同時保留長寬比,使用本機窗口調整控件(正常窗口邊框或任何平臺使用),這樣它的行爲邏輯和看起來不錯?
編輯,「提示」:我有時間做一些研究,覆蓋QQuickView::resizeEvent
並呼籲resize
從那裏似乎是能夠做的伎倆,但我沒有時間去得到它的工作非常正確。
感謝您的想法。我想我會保持框架,但我可能會做類似於你的事情:不允許正常調整大小,並且只是具有可切換的「正常大小」和「最大化大小」,而不是我自己調整大小的句柄。不過,我希望有人用完整的解決方案來回答。 – hyde
唉,過濾掉resize事件不會阻止窗口調整大小,因爲我認爲它會。 – dtech
看起來您可以通過設置最大和最小高度和寬度來停止調整大小,以僅允許一個大小。 – hyde