[Interest] [QtQuick] Interaction with user from C++
Sina Dogru
sinadooru at gmail.com
Wed Apr 27 19:12:40 CEST 2016
Seems like it is undefined behaviour to have QFileDialog without a parent.
Sometimes it becomes "ApplicationModal" but sometimes "NonModal" (I
experienced it with a simple code on Linux.)..
Also Shawn warned that would block QML thread. So to try what is the
behaviour of engine when the thread is block, I wrote a simple code where a
timer increment an int and a text showing that int in QML. And from that
QML called a C++ function which blocks it. But seems like engine keep
working while it suppose to block (tried on 5.6).
Now I need to choose between "bouncing between QML and C++" or "breaking in
multiple functions". Thanks for helping and acquired a vision.
Sina
2016-04-26 22:32 GMT+03:00 Jérôme Godbout <jerome at bodycad.com>:
> We have QWidgets as base window (QMainWindow) that have the QQuickView
> into it. For the parent, we use the QMainWindow. Maybe this explain why it
> work well in our case. We have some tools that are still into QWidgets
> (TreeView mostly with dock window, the Qml TreeView, is somewhat... painful
> in the current state).
>
> In the case of a Qml ApplicationWindow, I don't known if this would work,
> it's a QObject and not a QWidgets, the QDialog call require a QWidgets
> pointer as first argument. hummm, I did not realized that until now. Good
> point Sina Dogru.
>
> Not sure what is the behavior if the first argument is null if only have a
> Qml ApplicationWindow. If this work let me know, I'm curious to see if this
> work or not.
>
>
> On Tue, Apr 26, 2016 at 3:17 PM, Sina Dogru <sinadooru at gmail.com> wrote:
>
>> Yes I got your points. At least there is no any bouncing between QML and
>> C++.
>>
>> 2016-04-26 20:11 GMT+03:00 Jérôme Godbout <jerome at bodycad.com>:
>>
>>> We are mostly using QFileDialog and QMessageBox. Note the Qml type but
>>> the one from QtWidgets/QFileDialog
>>>
>>> *Q_INVOKABLE QString getSaveFileName(...); // .h*
>>>
>>>
>>> *QString MySingletonDialog::getSaveFileName(...) // .cpp*
>>> *{*
>>> * return QFileDialog::getSaveFileName(...);*
>>> *}*
>>>
>>
>> What is the parent argument for QFileDialog? I guess this is needed to
>> modal window work properly?
>>
>> The only way I see it is a follow (not tested just the way I see it into
>>> Qml Dialog):
>>>
>>> *Dialog*
>>> *{*
>>> * id: myDialog_*
>>> * contentItem: null*
>>> // Dummy content can be from anywhere or you could have a static
>>> object with options as property here
>>> * property Item myDialog1: Item { ... }*
>>>
>>> * property Item myDialog2: Item { ... }*
>>> // dynamic functor
>>> * property var acceptedCallback: null*
>>> * property var rejectedCallback: null*
>>> * onAccepted: { if(acceptedCallback) acceptedCallback(clickedButton); }*
>>> * onRejected: { if(rejectedCallback) rejectedCallback(clickedButton); }*
>>> // ... add other wanted handler for all the possible signal here
>>> *}*
>>>
>>> // inline callback (you can create function per sub function but that
>>> make the code look like a big goto mess). It's only 2 calls to interact
>>> with user and not branching does nothing else and it's already messy.
>>>
>>> *function myAction()*
>>> *{*
>>> * myDialog_.contentItem = myDialog_.myDialog1;*
>>> * myDialog_.rejectedCallback = function(button) *
>>> * {*
>>> * console.log('error');*
>>> * };*
>>> * myDialog_.acceptedCallback = *
>>> * function(button)*
>>> * {*
>>> // Do some stuff, need to ask something else
>>> * myDialog_.contentItem = myDialog_.myDialog2;*
>>> * myDialog_.rejectedCallback = function(button) *
>>> * {*
>>> * console.log('error 2');*
>>> * };*
>>> * myDialog_.acceptedCallback = function(button) *
>>> * {*
>>> // Do some stuff further
>>> // continue to dig a grave here by calling more dialog...
>>> * };*
>>> * myDialog_.open();*
>>> * };*
>>> * myDialog_.open();*
>>> *}*
>>>
>>
>> That is one of the other thing that I was trying to avoid while asking
>> the question actually. Then there should be too many function definitions
>> for different kind of scenarios :S. Seems like your first solution is the
>> best one we have. Thank you for helping.
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160427/ae33db17/attachment.html>
More information about the Interest
mailing list