[Interest] Issues with QML binding

Alexander Dyagilev alervdvcw at gmail.com
Thu Jul 29 22:13:34 CEST 2021


Sounds like a race condition bug affecting your method.

On Thu, Jul 29, 2021, 21:54 Nibedit Dey <nibedit.dev at gmail.com> wrote:

> Thank you for your inputs.
> The values are fetched only once and assigned to the *Text *element.
> This doesn't require any notification later as the data doesn't change in
> the app's lifetime.
> Hence, I haven't used Q_PROPERTY and notification signals. However, the
> *getStringData()* has some logic inside it before returning the string.
>
> This issue is sometimes seen in low-end embedded hardware and does
> not appear at all in desktop and high-end embedded devices. I know the
> issue can be fixed by using Q_PROPERTY and notification signals,
> but I am trying to understand what might be going wrong in low-end
> embedded hardware. Debugging is not helping much here as it is not
> repeatedly reproducible.
> It seems like there is some sync issue with Q_INVOKABLE method execution
> time and QML creation in some low-end hardware.
>
> For example, if I want to show the version number of an application by
> invoking a C++ function like below:
> text: "Version:" + *backendCPP.getVersion()*
> Do you see any problem with the above line?
>
> Thanks & Regards,
> Nibedit
>
> On Thu, Jul 29, 2021 at 11:18 PM Alexander Dyagilev <alervdvcw at gmail.com>
> wrote:
>
>> *backendCPP.getStringData() is  a method. You can't bind it. You should
>> use propery (Q_PROPERTY) and bind to it *
>> *instead. *
>> On 7/27/2021 6:50 PM, Nibedit Dey wrote:
>>
>> Dear All,
>>
>> I recently came across a strange issue related to QML binding.
>> The issue is not reproducible often which makes it difficult to find the
>> root cause.
>>
>> Sample QML code:
>> Case 1: *text : "Retrieved details"+ backendCPP.getStringData()
>>  //Sometimes, the complete string is empty*
>> *Case 2: property string someString : backendCPP.getStringData()*
>> *text: **"Retrieved details:"+** someString // Displays **Retrieved details:
>> value remains empty*
>>
>> 99% time, the value is fetched and displayed properly in Text element.
>> Rarely, it remains empty.
>> Here backendCPP is a C++ instance exposed through context property and
>> an invokable method is used to fetch data. Notify signal is not used in
>> this case.
>> I believe during failure cases the data is not retrieved from backendCPP,
>> when binding happened due to delay in the invokable method. Is my
>> assumption correct?
>> Although we can handle the issue in multiple ways including using a
>> NOTIFY signal or using Qt.binding, I am curious if anyone has observed this
>> issue.
>> Please share your inputs.
>>
>> Thanks & Regards,
>> Nibedit
>>
>> _______________________________________________
>> Interest mailing listInterest at qt-project.orghttps://lists.qt-project.org/listinfo/interest
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20210729/c622d304/attachment.html>


More information about the Interest mailing list