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

Jérôme Godbout jerome at bodycad.com
Tue Apr 26 14:34:00 CEST 2016


I can tell what we did, we made a FileSystem C++ singleton that expose most
file system file/url check, we made those check inside Qml javascript now.
This way you can make callback and GUI logic into Qml. We expect C++
function to be call with valid argument all the time. Else we always return
error (unexpected error, since the Qml code should have validate before
making the call, this is a developer issue).

Side Note: We also have experiment with throw from C++ that get evaluate
into Qml, it work, but it would be nice to have a proper keyword with throw
type to indicate this and the exception get transfer to into Q_INVOKABLE.
Would allow for better error handling.

On Tue, Apr 26, 2016 at 5:58 AM, Sina Dogru <sinadooru at gmail.com> wrote:

>
>
> 2016-04-26 12:11 GMT+03:00 Shawn Rutledge <Shawn.Rutledge at qt.io>:
>
>>
>> You shouldn’t need to do this.  Just write onAccepted/onRejected handlers
>> which call back to QML and/or C++ code as necessary.  Is there some reason
>> why that is difficult?
>>
>> Well the problem is (like I tried to explain on the email to Dmitry)
> while using QFileDialog's and QMessageBox's static functions, program can
> continue to flow from where those functions called.
>
> Let me please explain myself with a piece of code;
>
> void App::saveAs(const QString &path)
> {
>     bool cont = true;
>
>     while (cont) {
>         if (path.isEmpty())
>             cont = false;
>         else {
>             QFileInfo fi = path;
>
>             if (fi->exists()) {
>                 int wantSave = QMessageBox::warning(nullptr,
> tr("Warning"), tr("File %1 exists.\n"
>                                                     "Do you wish to
> overwrite it?").arg(fi->fileName()),
>                                                     QMessageBox::Yes,
> QMessageBox::No);
>                 if (wantSave == QMessageBox::Yes)
>                     cont = false;
>                 else
>                     path = QFileDialog::getSaveFileName(nullptr, tr("Save
> As"));
>             }
>             else
>                 cont = false;
>         }
>     }
>     if (!path.isEmpty())
>         doc->save(url);
> }
>
> For example, when the user press the save as tool button of the QML
> ApplicationWindow, this slot is called onAccepted handler of the
> FileDialog. But depending on the user input, application might need to do
> something else.
>
> But I am not sure if I am violating the "UI and business logic seperation"
> with this approach?
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20160426/6660f3f4/attachment.html>


More information about the Interest mailing list