[Interest] [QtQuick] Interaction with user from C++

Sina Dogru sinadooru at gmail.com
Tue Apr 26 12:27:38 CEST 2016


Yes I guess I am still thinking procedural way. Do you have any
recommendation book/documents to understand  declarative programming?

Thank you for your helps.
Sina

2016-04-26 13:07 GMT+03:00 Dmitry Volosnykh <dmitry.volosnykh at gmail.com>:

> > Well the problem is ... while using QFileDialog's and QMessageBox's
> static functions, program can continue to flow from where those functions
> called.
>
> This is declarative language. Spaghetti code is unavoidable %) You'll have
> to do a mind-shift to use QML as it was designed.
>
> On Tue, Apr 26, 2016 at 1:03 PM Dmitry Volosnykh <
> dmitry.volosnykh at gmail.com> wrote:
>
>> > FileDialog's open function would not return the file URL while
>> QFileDialog::getSaveFileName would return it
>> While FileDialog.open() does not return anythying, you still able to get
>> file's URL via fileUrl property of FileDialog instance like follows:
>>
>> FileDialog {
>>   id: fileDialog
>>   onAccepted: console.log("User selected file:", fileUrl)
>> }
>>
>> Situation with MessageBox is mostly the same. This QML type provides,
>> basically, the same functionality as its C++ counterpart. So you may
>> perform different actions upon receiving different signals which correspond
>> to buttons that user may press (Not suprisingly that these signals are
>> named exactly the same as button enum's that are returned as an int result
>> of QMessageBox::exec() method). So, here you are:
>>
>> MessageBox {
>>   id: messageBox
>>   onYes: console.log("User pressed Yes button")
>>   onNo: console.log("User pressed No button")
>>   onApply: console.log("User pressed Apply button")
>>   // etc ...
>> }
>>
>> On Tue, Apr 26, 2016 at 12:36 PM Sina Dogru <sinadooru at gmail.com> wrote:
>>
>>> Hi, Sina. You may try to wrap those C++-side static methods with
>>>> intermediary class that is exposed to QML in a usual way. As far as I
>>>> remember there should be some API for opening files as well as for message
>>>> notifications. But that will require you to import QtQuick.Controls module.
>>>> Please, refer to official documentation for more precise name of the module.
>>>>
>>> Hello Dmitry, thank you for respond. I think you are talking about the
>>> FileDialog QML type and MessageBox. But my problem is, when I call a static
>>> method of the intermediary class which calls FileDialog's open function
>>> would not return the file URL while QFileDialog::getSaveFileName would
>>> return it. So to do it, QML would need to call another function onAccepted
>>> handler and it would need to know which function it needs to call.
>>>
>>> I mean, for example consider a situation where a C++ class process a
>>> user input carried from QML to C++. If the user input is incorrect, I would
>>> need to ask the user some options. So I pop up a message box which presents
>>> the options to the user with this intermediary class. But when I do this, I
>>> would lose the flow of the program. So when the user responds to the
>>> message box, I would need to call another C++ function to process. But
>>> since QMessageBox's and QFileDialog's static functions create their own
>>> event loop and returns the data, I would be able to process new data
>>> without loosing the current stack and flow of the program.
>>>
>>> So QMessageBox and QFileDialog's static functions are not need to know
>>> on their event handlers, because they just returns the information that is
>>> needed so program can continue from the same stack.
>>>
>>> Like I said, I am not so exprienced with programming. I might be
>>> misjudging your advice or QML and C++ seperation.
>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160426/2e4db102/attachment.html>


More information about the Interest mailing list