[Interest] Qml Combo box and model changed

Jérôme Godbout jerome at bodycad.com
Wed Dec 10 18:03:29 CET 2014


Here's an ugly workaround I did on my CustomComboBox

ComboBox
{
        ...

        // Ugly workaround model change reset current index selection
property int __lastValidIndex: 0
 onCurrentIndexChanged:
{
if(model.length > 0 && currentIndex > 0 && currentIndex != __lastValidIndex)
__lastValidIndex = currentIndex;
}
 onModelChanged:
{
if(model.length > 0 && __lastValidIndex > 0 && currentIndex !=
__lastValidIndex)
currentIndex = __lastValidIndex;
}
}

It's still oscillating between the index 0 and the real value on model
change, but at least I end up with the proper value in the end. Still a
problem performance wise if that combo box entry control some workflow or
some options of the workflow.

On Wed, Dec 10, 2014 at 11:11 AM, Jérôme Godbout <jerome at bodycad.com> wrote:

> Hi,
> I'm having some problem with i18n along with the ComboBox controls. Here's
> something I'm doing with it:
>
> ComboBox
> {
>   model: [ qsTr("Choice A") + I18n.revaluate,
>                qsTr("Choice B") + I18n.revaluate ]
>   currentIndex: 1
> }
>
> I used the i18n revaluation on a singleton to select current application
> language (would do the same without it, if we change the model from a
> function).
>
> When the language changed, here's what happen:
>
>    1. The list get it's values changed by changed on I18n (trigger
>    I18n.revaluateChanged())
>    2. The combo box model changed.
>    3.  the model look like a QQmlPropertyList, since it clear it and
>    repopulate it after
>    4. The model get clear, the current index goes back to 0
>    5. The new values are displayed but the current selection on all combo
>    box are reverted to the first entry.
>
> I stated before, this also happen when assigning the model from a function.
> Is there a way to prevent this or to hook ourself to keep the previous
> value? I cannot used on modelChanged, since it would already imply the
> value have changed (and cannot make sure the currentIndex is already
> changed, since it's also done on the same signal).
>
> The clear and assign of QQmlListProperty give us many problems everywhere
> (performance wise with long list and things like this). I would love to see
> a full copy assignation operator (along the append, clear, at, count). That
> would be way faster and prevent problems like this, since the current index
> would still be valid on changed. Suggestion out maybe use a QVariantList
> instead for the model? not sure what it would imply underneath.
>
> Thanks,
> Jerome
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20141210/b6cf8059/attachment.html>


More information about the Interest mailing list