[Interest] QML: PlaceholderText on ComboBox (Controls 2)

Carel Combrink carel.combrink at gmail.com
Mon Sep 2 10:32:37 CEST 2019


Sorry, forgot the file, see attached:


On Mon, Sep 2, 2019 at 10:26 AM Carel Combrink <carel.combrink at gmail.com>
wrote:

>
>> That should work (and it appears to from the output), so I'm not sure why
>> you don't see the placeholder text, assuming that is the actual issue here.
>>
> I am not seeing the placeholder text
>
>
>
>> The way you're doing it in onCompleted is the easiest way to do it
>> currently, and it should work. Can you please post a minimal example here
>> so we can see why it's not working first?
>>
> I have attached a main.qml file that can be executed with the qml
> applicaiton: qml main.qml (I am on windows)
>
> The following screenshot shows what I get when I run the qml file with Qt
> 5.12.3 and 5.12.4 on Windows
> The checkbox controls if the combo boxes are editable to show that the
> placeholder text is still shown in the second box when toggled.
> The first ComboBox uses the method mentioned in my original email.
> The second ComboBox I have copied the style from the Fusion and set the
> placeholderText directly on the TextField
>
>
> [image: image.png]
>
>
>> As for a feature request, you can create one if you want. I wonder if
>> something like Nils' idea of exposing a textField property would be the
>> best solution to this:
>>
>>
>> https://bugreports.qt.io/browse/QTBUG-71406?focusedCommentId=438916&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-438916
>>
>> Usually the contentItem is a TextField, but if it's not, it would just be
>> null. The problem is that this same issue likely applies to lots of other
>> controls, and it might end up in a slippery slope of adding these
>> type-specific accessor properties.
>>
>
> I would also support either exposing the item or seeing if what I am
> trying can be fixed.
> Strangely the "selectByMouse" option can be changed using the "
> comboCategory_.contentItem.selectByMouse = true" code and it works as
> expected (set in the attached code)
>
> Regards,
> Carel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20190902/4a2499a0/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 28504 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20190902/4a2499a0/attachment.png>
-------------- next part --------------
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.12


import QtQuick.Controls 2.12
import QtQuick.Controls.impl 2.12
import QtQuick.Controls.Fusion 2.12
import QtQuick.Controls.Fusion.impl 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    ListModel {
                    id: model
                    ListElement { text: "" }
                    ListElement { text: "Banana" }
                    ListElement { text: "Apple" }
                    ListElement { text: "Coconut" }
                }

    ColumnLayout {

        CheckBox {
            id: checkEdit_
            text: "Toggle edit"
            checked: true
        }

        Label { text: "Normal ComboBox with placeholderText on contentItem" }

        ComboBox {
            id: comboCategory_
            editable: checkEdit_.checked
            currentIndex: -1
            model: model

            Component.onCompleted: {
                console.log("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
                console.log( "ContentItem is    : " + comboCategory_.contentItem )
                console.log( "placeholderText is: " + comboCategory_.contentItem.placeholderText )
                comboCategory_.contentItem.placeholderText      = "<category>"
                comboCategory_.contentItem.selectByMouse        = true
                console.log( "placeholderText is: " + comboCategory_.contentItem.placeholderText )
                console.log("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")
            }
        }

        Label { text: "ComboBox using contentItem from Fusion Style with placeholderText" }

        ComboBox {
            id: control
            editable: checkEdit_.checked
            currentIndex: -1
            model: model

            contentItem: TextField {
                placeholderText: "<category>" /* <<== HERE */

                topPadding: 4
                leftPadding: 4 - control.padding
                rightPadding: 4 - control.padding
                bottomPadding: 4

                text: control.editable ? control.editText : control.displayText

                enabled: control.editable
                autoScroll: control.editable
                readOnly: control.down
                inputMethodHints: control.inputMethodHints
                validator: control.validator

                font: control.font
                color: control.editable ? control.palette.text : control.palette.buttonText
                selectionColor: control.palette.highlight
                selectedTextColor: control.palette.highlightedText
                verticalAlignment: Text.AlignVCenter

                background: PaddedRectangle {
                    clip: true
                    radius: 2
                    padding: 1
                    leftPadding: control.mirrored ? -2 : padding
                    rightPadding: !control.mirrored ? -2 : padding
                    color: control.palette.base
                    visible: control.editable && !control.flat

                    Rectangle {
                        x: parent.width - width
                        y: 1
                        width: 1
                        height: parent.height - 2
                        color: Fusion.buttonOutline(control.palette, control.activeFocus, control.enabled)
                    }

                    Rectangle {
                        x: 1
                        y: 1
                        width: parent.width - 3
                        height: 1
                        color: Fusion.topShadow
                    }
                }

                Rectangle {
                    x: 1 - control.leftPadding
                    y: 1
                    width: control.width - 2
                    height: control.height - 2
                    color: "transparent"
                    border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255)
                    visible: control.activeFocus
                    radius: 1.7
                }
            }

        }
    }

}


More information about the Interest mailing list