QML“材质样式”组合框错误?

问题描述 投票:0回答:2

我注意到,当我选择“材质样式”,然后在模型中创建包含许多元素的组合框时,第二次单击时它会向下滑动弹出窗口。问题是我无法选择组合框中的最后一个元素。在创建对话框/弹出窗口时,我已经遇到过这种问题(向下滑动弹出窗口并稍微向右滑动),但后来我使用“parent: Overlay.overlay”并设置 x,y 坐标,一切正常。这次我不知道如何修复它。

截图:

第一次单击组合框:

enter image description here

第二次单击组合框:

enter image description here

这是我的代码:

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    id: window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    ComboBox {
        id: comboBox
        anchors.verticalCenter: parent.verticalCenter
        anchors.horizontalCenter: parent.horizontalCenter
        model: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    }
}

main.py:

import sys
import os

from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine


if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
    os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"
    engine = QQmlApplicationEngine()
    engine.load(os.path.join(os.path.dirname(__file__), "main.qml"))

    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())
python combobox qml pyside2
2个回答
0
投票

问题在我的系统上重现(在使用 Intel CPU 的 Ubuntu 20.04 上),因此它似乎确实是一个错误。

我可以通过自定义 ControlBox 的弹出窗口来解决此问题(请参阅自定义组合框)。 这是我的 main.qml:

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.15

ApplicationWindow {
    id: window
    width: 640
    height: 480

    visible: true
    title: qsTr("Hello World")

    ComboBox {
        anchors.centerIn: parent
        id: control
        model: 20

        popup: Popup {
            y: control.height/2-implicitHeight/2
            width: control.width
            implicitHeight: contentItem.implicitHeight < (ApplicationWindow.window.height * 0.9)? contentItem.implicitHeight : ApplicationWindow.window.height * 0.9

            padding: 0
            Material.elevation: 3

            contentItem: ListView {
                clip: true
                implicitHeight: contentHeight
                model: control.popup.visible ? control.delegateModel : null
                currentIndex: control.highlightedIndex
            }
        }
    }
}

我使用了“默认”qtquickcontrols2.conf 文件:

[Controls]
Style=Material

[Universal]
Theme=System
Accent=Red

[Material]
Theme=Light
Accent=Teal
Primary=BlueGrey

您可能需要稍微修改一下,才能按照您想要的方式获得自定义弹出窗口的外观和感觉(正如我不得不做的那样),以便获得与 ControBox 在设置时的默认行为类似的行为,或者您想要的行为行为(我使用了 y、implicitHeight、padding 和 Material.elevation,但保留了 Material 的属性,除了海拔)。

您可能注意到我用 ApplicationWindow 替换了 Window,因为这是我所熟悉的并提供对 ApplicationWindow 覆盖层的访问。

我希望这个解决方法也适用于您的设置。


0
投票

这是一个错误,我找到原因了。

enter : Transition
{
  // grow_fade_in
  //NumberAnimation { property : "scale"; from : 0.9; to : 1.0; easing.type : Easing.OutQuint; duration : 220 }
  NumberAnimation { property : "opacity"; from : 0.0; to : 1.0; easing.type : Easing.OutCubic; duration : 150 }
}

exit : Transition
{
  // shrink_fade_out
  //NumberAnimation { property : "scale"; from : 1.0; to : 0.9; easing.type : Easing.OutQuint; duration : 220 }
  NumberAnimation { property : "opacity"; from : 1.0; to : 0.0; easing.type : Easing.OutCubic; duration : 150 }
}

如果您像我一样注释掉每个转换的第一个 NumberAnimation,您将不再遇到该问题。 缩放属性导致它。我尝试通过更改数字来修复它,但没有找到保留缩放属性的修复方法,但您仍然拥有不透明度属性。

© www.soinside.com 2019 - 2024. All rights reserved.