QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?
-
Hi, I am using QT Creator 4.6.1 based on QT 5.10.1 with OpenCV 2.4.13.
I created a C++ console application. The contents of the main() file look something like this:
#include <QCoreApplication> **Include OpenCV libraries here** using namespace cv; using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Mat image; **Read in an image using imread()** imshow("Frame", image); waitKey(10); return a.exec(); }
However when I run the application, I get the the following error:
QWidget: Cannot create a QWidget without QApplication
This problem only occured after updating QT. Previously I was able to use imshow() inside of a console application without any errors.
Is there any way to fix this ? Thanks
-
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
This problem only occured after updating QT. Previously I was able to use imshow() inside of a console application without any errors.
Assuming opencv uses the Qt backend then you have depended on an undocumented behavior. Fixing your code would be a place to start - use
QApplication
. -
@kshegunov said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
This problem only occured after updating QT. Previously I was able to use imshow() inside of a console application without any errors.
Assuming opencv uses the Qt backend then you have depended on an undocumented behavior. Fixing your code would be a place to start - use
QApplication
.QApplication only works with a GUI project.
-
@JonB said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
This problem only occured after updating QT. Previously I was able to use imshow() inside of a console application without any errors.
Updating to Qt 5.10.1 from what version? Qt 4?
No, Qt5, just a minor update. Other than an update, I can't imagine what could have caused this issue. It was definitely working at one stage.
-
@mranger90 said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
@R-P-H
Did you change compilers as well ?I did add a x64 bit mingw compiler to Qt. However, I did not change the compiler of the project. It is still using the default mingw32 compiler.
-
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
QApplication only works with a GUI project.
If you want to show a GUI window, you are making a GUI project, surely?
-
@wrosecrans said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
QApplication only works with a GUI project.
If you want to show a GUI window, you are making a GUI project, surely?
No, it's a console project. I just wanted a pop up window for test purposes. For example, to check if an image is loading correctly. As I said, it did work before. I can't say for sure what caused it to stop working.
-
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
QApplication only works with a GUI project.
I'll bite. How are windows supposed to be created if you're not running X?
-
@kshegunov said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
QApplication only works with a GUI project.
I'll bite. How are windows supposed to be created if you're not running X?
Well Visual Studio has no problem doing it. I have made countless win32 console applications inside of Visual Studio (where the only output is a terminal window) and imshow() works perfectly.
It's not like I'm trying to open the image inside a Qt GUI window. It's an OpenCV image window that should open separately. As I said, there is no question that it was working before.
-
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
It's not like I'm trying to open the image inside a Qt GUI window.
Well apparently you are.
It's an OpenCV image window that should open separately.
Which I suspect uses Qt as a backend and it rightfully complains.
As I said, there is no question that it was working before.
This doesn't mean anything if you don't follow the rules.
QWidget
goes withQApplication
. To that end what's the problem of usingQApplication
and still use the console for input and output? -
@kshegunov said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
It's not like I'm trying to open the image inside a Qt GUI window.
Well apparently you are.
It's an OpenCV image window that should open separately.
Which I suspect uses Qt as a backend and it rightfully complains.
As I said, there is no question that it was working before.
This doesn't mean anything if you don't follow the rules.
QWidget
goes withQApplication
. To that end what's the problem of usingQApplication
and still use the console for input and output?The traditional terminal window is suppressed when using a GUI project and I have no need for a GUI window of any kind which gets created by default.
-
I've just confirmed that this will work on my system, Qt 5.10.0, MSVC 2017, OpenCV 3.1.0 (?), so it's not a matter of QCoreApplication vs QApplication.
using namespace cv; using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Mat image; image = imread("c:\\tmp\\triangle_red.png", CV_LOAD_IMAGE_COLOR); imshow("Frame", image); return a.exec(); }
-
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
The traditional terminal window is suppressed when using a GUI project and I have no need for a GUI window of any kind which gets created by default.
I didn't say to change your project type. I just said to replace
QCoreApplication
withQApplication
. -
@mranger90 said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
I've just confirmed that this will work on my system, Qt 5.10.0, MSVC 2017, OpenCV 3.1.0 (?), so it's not a matter of QCoreApplication vs QApplication.
using namespace cv; using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Mat image; image = imread("c:\\tmp\\triangle_red.png", CV_LOAD_IMAGE_COLOR); imshow("Frame", image); return a.exec(); }
Thanks for confirming. As I suspected, there is some other underlying problem on my system. Either from an update or from adding a 2nd compiler kit.
-
@kshegunov said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
The traditional terminal window is suppressed when using a GUI project and I have no need for a GUI window of any kind which gets created by default.
I didn't say to change your project type. I just said to replace
QCoreApplication
withQApplication
.Sorry, I didn't realise you meant just changing that. Changing it gives the error that it's not found.
-
You need to add
QT += widgets
to your .pro file to useQApplication
. -
@R-P-H said in QWidget: Cannot create a QWidget without QApplication - OpenCV imshow() 2.4.13 ?:
Changing it gives the error that it's not found.
Can you show the project file (*.pro)? I suspect you did not add
QT = core gui widgets
to it.