Dear Elvis,
It's very nice.
Thanks a lot.

Kind regards,
Robert


On Wed, Oct 21, 2020 at 9:53 PM Elvis Stansvik <elvst...@gmail.com> wrote:
>
> Den ons 21 okt. 2020 kl 09:08 skrev coroberti <corobe...@gmail.com>:
> >
> > Elvis and Scott,
> > Could you please provide a code sample?
>
> I can't show our actual code since it's proprietary, but here's an example:
>
> example.cpp:
>
> #include <QApplication>
> #include <QPushButton>
> #include <QProgressDialog>
> #include <QMessageBox>
> #include <QtConcurrentRun>
> #include <QFuture>
> #include <QFutureWatcher>
>
> class TaskButton : public QPushButton
> {
>     Q_OBJECT
>
> public:
>     void startTask() {
>         auto progressDialog = new QProgressDialog("Exporting...",
> QString(), 0, 10, this);
>         progressDialog->setWindowModality(Qt::WindowModal);
>         progressDialog->setAttribute(Qt::WA_DeleteOnClose);
>         progressDialog->show();
>
>         auto future = QtConcurrent::run(this, &TaskButton::task);
>         auto watcher = new QFutureWatcher<void>(this);
>
>         connect(this, &TaskButton::progressChanged,
>                 progressDialog, &QProgressDialog::setValue);
>
>         connect(watcher, &QFutureWatcher<void>::finished,
>                 watcher, &QFutureWatcher<void>::deleteLater);
>
>         connect(watcher, &QFutureWatcher<void>::finished,
>                 progressDialog, &QProgressDialog::close);
>
>         connect(watcher, &QFutureWatcher<void>::finished,
>                 this, &TaskButton::finished);
>
>         watcher->setFuture(future);
>     }
>
>     void task() {
>         for (int progress = 1; progress < 11; ++progress) {
>             QThread::sleep(1);  // Heavy task
>             emit progressChanged(progress);
>         }
>     }
>
> signals:
>     void progressChanged(int progress);
>     void finished();
> };
>
> int main(int argc, char *argv[]) {
>     QApplication app(argc, argv);
>
>     TaskButton button;
>     button.setText("Start Task");
>     button.show();
>
>     QObject::connect(&button, &QPushButton::clicked,
>                      &button, &TaskButton::startTask);
>
>     QObject::connect(&button, &TaskButton::finished, [&]() {
>         QMessageBox::information(&button, "Finished!", "We're done!");
>         app.quit();
>     });
>
>     return app.exec();
> }
>
> #include "example.moc"
>
>
> example.pro:
>
> TEMPLATE = app
> QT += widgets concurrent
> TARGET = example
> INCLUDEPATH += .
> DEFINES += QT_DEPRECATED_WARNINGS
> SOURCES += example.cpp
>
>
> HTH,
> Elvis
>
> >
> > Thanks,
> >
> > Kind regards,
> > Robert
> >
> > On Wed, Oct 21, 2020 at 9:51 AM Elvis Stansvik <elvst...@gmail.com> wrote:
> > >
> > > Den ons 21 okt. 2020 02:39Scott Bloom <sc...@towel42.com> skrev:
> > >>
> > >> Well. I 100% totally overthought this... and was able to implement this 
> > >> in about 10 lines of code using a derivation of QProgressDIalog + 
> > >> QtConcurrent
> > >>
> > >> The progress dialog, is run with windowModality set to  Qt::WindowModal,
> > >>
> > >> I overload exec, and launch the function then call QProgressDialog::exec.
> > >>
> > >> Works like charm. Thanks for the advice.
> > >
> > >
> > > Just to chime in: This is also the approach we've taken to some long 
> > > running operations in our application, and it has also worked out fine.
> > >
> > > Elvis
> > >
> > >>
> > >> Scott
> > >> -----Original Message-----
> > >> From: Interest <interest-boun...@qt-project.org> On Behalf Of Thiago 
> > >> Macieira
> > >> Sent: Tuesday, October 20, 2020 3:44 PM
> > >> To: interest@qt-project.org
> > >> Subject: Re: [Interest] question for a blocking background thread call
> > >>
> > >> On Tuesday, 20 October 2020 14:26:10 PDT Giuseppe D'Angelo via Interest 
> > >> wrote:
> > >> > Can't you just create a QDialog and exec() it?
> > >>
> > >> Or any other modal window in front. You probably want to display either 
> > >> a progress bar or a distraction, to let your users know that the 
> > >> application isn't frozen.
> > >>
> > >> --
> > >> Thiago Macieira - thiago.macieira (AT) intel.com
> > >>   Software Architect - Intel DPG Cloud Engineering
> > >>
> > >>
> > >>
> > >> _______________________________________________
> > >> Interest mailing list
> > >> Interest@qt-project.org
> > >> https://lists.qt-project.org/listinfo/interest
> > >> _______________________________________________
> > >> Interest mailing list
> > >> Interest@qt-project.org
> > >> https://lists.qt-project.org/listinfo/interest
> > >
> > > _______________________________________________
> > > Interest mailing list
> > > Interest@qt-project.org
> > > https://lists.qt-project.org/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to