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

2024-09-26 22:43:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到,当我选择“材质样式”,然后在模型中创建包含大量元素的组合框时,当第二次单击时,它会向下滑动弹出。问题是我不能选择组合框中的最后一个元素。在创建对话框/弹出窗口时,我已经遇到过这种问题(向下滑动弹出窗口并稍微向右),但随后我使用了“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_())

Tags: importid元素osmainsyswindowqml
1条回答
网友
1楼 · 发布于 2024-09-26 22:43:56

正如您在我的系统上所描述的那样(在使用英特尔CPU的Ubuntu 20.04上),这个问题再次出现,所以它看起来确实是一个bug

我可以通过定制ControlBox的弹出窗口来解决这个问题(请参见Customizing ComboBox)。 这是我的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、隐式权重、填充和Material.elevation,但只保留了材质的属性,高程除外)

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

我希望此解决方案也适用于您的设置

相关问题 更多 >

    热门问题