Solved Launch a second view on a pushed button
-
Something is wrong.
It say : "status sig: false"
So the signal is not generated.Also say:
QObject::connect: No such signal QQuickView::statusChanged() -
@Lucian
ahh sorry.
Didnt check the docs. ( shame on me)its just missing the parameter.
void QQuickView::statusChanged(QQuickView::Status status)
so its
QObject::connect(view,SIGNAL(statusChanged(QQuickView::Status) ),this, SLOT(startProcess(QQuickView::Status) ) );NOte. only Type is added. NOT the paramtername
and u need/could to change slot too
void Process::startProcess( QQuickView::Status thesatus) {
so here u can actually see if its ready etc.but u dont need to use the status :)
-
@Lucian
Please check documentation: http://doc.qt.io/qt-5/qquickview.html#statusChanged
The signal has a parameter, so it should be:qDebug() << "status sig:" << QObject::connect(view,SIGNAL(statusChanged(QQuickView::Status) ),this, SLOT(startProcess() ) );
-
-
@Lucian Try to connect first:
void Process::run() { QObject::connect(view,SIGNAL(view::statusChanged),this, SLOT(Process::startProcess())); view->setSource(QUrl("qrc:/loading.qml")); view->setResizeMode(QQuickView::SizeRootObjectToView); view->show(); }
-
Yes @jsulm .
It work but this doesn't solve my problem.
I try to connect status change with startProcess because the progress bar (loading.qml) was block by waitForFinish(-1).
Now is happening the same.
The signal and the slot are called in the right order but also loading.qml doesn't popup until i close the calc.exe. -
@Lucian Why do you wait for the process to finish?
this->proc->waitForFinished(-1);
Are you aware that this call blocks the event loop (so your app is blocked)?
-
Yes @jsulm .
I need to do that because the process what will be launch will create a txt file. This file will be use farder so i need to be sore the process has finished his job and has created the txt. -
@Lucian No need to wait for this! Just connect to http://doc.qt.io/qt-5/qprocess.html#finished signal - when it is called the process has finished...
Qt is an asynchronous framework - you should adapt to asynchronous programming. -
But how will wait my application to create the txt file ? Because after the process is finished i want to read from that .txt file created by him and if i read before creation the application will fail.
So i need to connect the finish signal from QProcess with a slot that make the read from .txt file? :D -
@Lucian Yes, you simply connect a slot to that signal and do what you want with that file in this slot.
-
I have made some changes and now look like this:
void Process::startProcess() { qDebug() << "startProcess called"; this->proc->start("C:\\Windows\\System32\\calc.exe", QIODevice::ReadWrite); qDebug() << "connect status :" << QObject::connect(proc,SIGNAL(QProcess::finished()),this, SLOT(addData())); }
And the slot:
void Process::addData() { qDebug() << "addData call:"; SomeClasss c; c.read(); }
The problem is again with type of the signal:
*QObject::connect: No such signal QProcess::QProcess::finished()From documentation (Qt doc) doesn't seems to be something wrong.
-