QML QtQuick.Controls 2.2 Combobox 没有 selectByMouse;啥是替代方案?

Posted

技术标签:

【中文标题】QML QtQuick.Controls 2.2 Combobox 没有 selectByMouse;啥是替代方案?【英文标题】:QML QtQuick.Controls 2.2 Combobox doesn't have selectByMouse; What is the alternative?QML QtQuick.Controls 2.2 Combobox 没有 selectByMouse;什么是替代方案? 【发布时间】:2017-09-15 12:27:15 【问题描述】:

我们使用的是QtQuick.Controls 2.2,由于各种原因无法降级。当我们使用 QML 中的 Combobox util 时,它不会出现在 1.4 版本中引入的 selectByMouse 字段。

我们的要求是——能够选择组合框中的文本进行复制,并具有下拉菜单。

如何解决这个问题;有没有其他选择?

【问题讨论】:

一个“复制”按钮? 报告一个错误,同时,作为一种解决方法,您自己将其设置为 true:Component.onCompleted: cbox.contentItem.selectByMouse = true 对不起,只是在发布我的回答后才注意到你已经在上面的评论中说过。 【参考方案1】:

您可以将contentItem 更改为具有您选择的属性的TextField。这可能看起来像这样:

ComboBox 
    id: control
    model: ['Hallo', 'Hello', 'Sallut', 'Godan Dagin']
    editable: true

    contentItem: TextField 
        text: control.editText
        selectByMouse: true
    

请注意,如果您编辑文本,而 editText 不是您的模型的元素,则它不会被接受为 displayText

这适用于QtQuick.Controls 2.2 以后,因为属性editableeditText 需要存在。然后它会自动将编辑后的文本复制回displayText,一旦它是一个有效的输入。 对于早期版本,这要实现起来要困难得多。

【讨论】:

覆盖默认的 contentItem 可能会很痛苦,因为您会丢失很多默认的原始行为,除非您从 Qt 框架附带的 ComboBox.qml 中的 TextField 中复制所有绑定和属性。跨度> 或者换一种说法,默认的 contentItem TextField 实现有很多属性和绑定集,这些在这个答案中是没有的。忽略它们会丢失任何重要的行为吗? 我能想到的相关属性绑定都是从外部自动创建的……例子是有效输入的自动实时提案以及control.displayText的更新。出于可读性原因,我省略的属性绑定是样式属性,例如不同状态的颜色等。 doc.qt.io/qt-5/… 我更喜欢这个答案,因为它使用了 ComboBox 的记录属性,而不是对 contentItem 做出任何假设【参考方案2】:

从 Qt 5.9 / Quick Controls 2.2 开始,如果 ComboBox 设置为 editibleComboBox 现在包含 TextField 以显示当前文本。 TextField 确实具有您需要的 selectByMouse 属性,只是它没有作为 ComboBox 的属性公开,因此 QML 无法访问它。但是,它可以在 javascript 中访问,例如来自 Component.onCompleted 附加的信号处理程序。

例如:

ComboBox 
    editable: true

    model: ListModel 
        id: model
        ListElement  text: "Banana" 
        ListElement  text: "Apple" 
        ListElement  text: "Coconut" 
    

    Component.onCompleted: 
        contentItem.selectByMouse = true
    

【讨论】:

虽然答案总是很受欢迎,但提供一些有关如何您的代码解决手头问题的附加信息确实很有帮助。这样做有助于那些有类似(但不相同)问题的人。不是每个人都熟悉您的确切编码逻辑,但可能了解您的一般方法概念。为了帮助改进您的答案,请提供一些context surrounding it,并查看writing great answers 上的帮助文章以获取有关如何使您的答案重要的一些提示:)

以上是关于QML QtQuick.Controls 2.2 Combobox 没有 selectByMouse;啥是替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

QML:带有图标的 QtQuick.Controls 选项卡

菜单栏 QML QtQuick.Controls 1.0

QtQuick/Qml自定义控件(1)-ToolTip

使用 QtQuick.Controls 1.12 将 Qt TextTable 与 TextArea 一起使用时,文本会错位

QML的Window与ApplicationWindow

使用 PyQt 将基于 qml 的图表集成到现有的 ui