Qmake doesn't generate a header file - qmake

So here is my problem. I just started studying Qt. I study from a book about Qt. There is shown how to make a simple dialog. The dialog is made with Qt Designer. The book says that when I'm done making the design in the file called gotocelldialog.ui, I need to go to main.cpp and type this:
#include <QApplication>
#include <QDialog>
#include "ui_gotocelldialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Ui::GoToCellDialog ui;
QDialog *dialog = new QDialog;
ui.setupUi(dialog);
dialog->show();
return app.exec();
}
It is said that when I run this witk Qmake, a header file will be generated from my gotocelldialog.ui. But the only thing that is generated is .pro file. This is its content:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled
TEMPLATE = app
SOURCES += main.cpp
HEADERS +=
FORMS += \
gotocelldialog.ui
I can't understand why ui_gotocelldialog.h is not generated. I'm using Qt 5.1.1 - the latest version.
Can you explain me this with details because as I said I'm new to Qt and I don't know well how Qmake works. Thanks for reading.

For Mac users, open the terminal and go to the folder where your files in, then type the following
This line will generate the .pro file
> qmake -project
This line will generate the Makefile
> qmake
This line will generate the rest of files (in your case Forms.app, main.o, and ui_gotocelldialog.h)
> make
You need gotocelldialog.ui and main.cpp in the same folder (Note: you must have only one .pro file which will be generated by "qmake -project" otherwise you need to specify the .pro file). That being said, if the problem still exists then the problem has nothing to do with qmake or Qt designer.

Related

Why does my code crash when libvlc_media_new_path() is called?

after several days of trying myself to solve my problem I would like to kindly ask for your help:
I am trying to make the libvlc / SDL 2.0 tutorial working.
I am coding in Visual Studio 2022 in x86 C++ Console.
I have linked the libvlc library path and include path and have added the libvlc.lib file in my project linker settings.
The program compiles without error and crashes when libvlc_media_new_path is called.
You see all different formats of path I have used in my minimal reproducible example below:
My sources:
I downloaded the vlc master from Github to get the headers / include directory.
I downloaded the vlc-3.0.17.4-win32 release and from there took the libvlc.dll.
From the libvlc.dll I created the lib file following a visual studio command prompt procedure.
What i noticed is that the function libvlc_media_new_path() only takes the path as an argument now. All examples i find in the internet are with the libvlc instance AND the path as arguments.
Thank you so much for your help!
#include <stdlib.h>
#include "vlc/vlc.h"
int main(int argc, char* argv[]) {
libvlc_instance_t* libvlc;
libvlc_media_t* m;
libvlc_media_player_t* mp;
libvlc = libvlc_new(0, NULL);
if (NULL == libvlc) {
printf("LibVLC initialization failure.\n");
return EXIT_FAILURE;
}
m = libvlc_media_new_path("/1.mp4");
//m = libvlc_media_new_path("C:\\Programmieren\\PACA\\1.mp4");
//m = libvlc_media_new_path("C:/Programmieren/PACA/1.mp4");
//m = libvlc_media_new_path("C://Programmieren//PACA//1.mp4");
//m = libvlc_media_new_path("C:\Programmieren\PACA\1.mp4");
//m = libvlc_media_new_path("file:///C:/Programmieren/PACA/1.mp4");
mp = libvlc_media_player_new_from_media(libvlc, m);
return 0;
}
If you go to Github and click on the Tags link, you can get the headers for version 3.0.17.4. In there you will see that libvlc_media_new_path takes an instance as an argument.
The other option would be to get or build the 3.0.18 DLL.

why its not easy to install opencv as you can see in tutorials?

installing some libraries like opencv is hard unfair game with this level:(but it's seems easy when you are watching youtube:) )
Error 1 : strcpy_s and strcat_s are not declared in this namespace. To resolve it use the function strncpy and strncat respectively. The format of latter is different from previous one.
strncpy( szKey, icvWindowPosRootKey, 1024 );
strncat( szKey, name, 1024 );
Error 2 : time was not found in this scope.
Error 3 :modules\videoio\CMakeFiles\opencv_videoio.dir\build.make:146: recipe for target 'modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dshow.cpp.obj' failed
Error 4 : recipe for target 'modules/videoio/CMakeFiles/opencv_videoio.dir/all' failed
mingw32-make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all
Error 5 :recipe for target 'all' failed
Error 6 : ‘M_PI’ was not declared in this scope
Error 7 : ‘posix_memalign’ was not declared in this scope
Error 8 :‘D3D11_TEXTURE2D_DESC’ was not declared in this scope
Error 9 :opencv 'nullptr' was not declared in this scope
Error 10 : 'mutex' in namespace 'std' does not name a type
Error 11 :expected unqualified-id before '>' token
Error 12 :limpc-3.dll was not found opencv
Error 13 :recipe for target pch_Generate_opencv_core.dir/all' failed
Error 14 :'modules/core/precomp.hpp.gch/opencv_core_Release.gch' failed opencv 4
fallow these 2 tutorials if have some problems with opencv and test different vertion of mingw cmake and codeblock :
https://blog.faltutech.com/2018/c-plus-plus-c/09/03/compile-and-integrate-opencv-3-4-1-into-codeblocks-17-12-with-gcc-5-1-0/#
https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/
second tutorials is more important(blog.huihut.com)
:::::
(this is first tutorials)
Needed Tools:
OpenCv 3.4.1 Windows self-extracting archive Download
CodeBlocks 17.12 Without Mingw Download
Cmake 3.12 .msi Download
TDM-GCC-64 (tdm64-gcc-5.1.0-2.exe) Download //i use this vertion :x86_64-5.3.0-release-posix-seh-rt_v4-rev0
Common Sense Download 🙂
Steps:
Install and open Cmake
Download and Extract Opencv (exe is a type of package. It will ask you the path when you open the opencv.exe) in directory c:\Opencv
Create new directory “opencv_codeblocks” in C:\opencv
Download and Install TDM-GCC-64 in directory C:\TDM-GCC-64 and add the path “C:\TDM-GCC-64\bin” to the environment variables. Watch below video to know how to add the the path to environment variables.
Open CMake.
Select path “C:/Opencv/opencv/sources” in Option Where is the source code
Select path “C:/Opencv/Opencv_codeblocks” in Option Where to build the binaries. These are same folder we have created earlier.
Click Build.
Now you will see some options in table like structure. Few will be checked and few are not. So make sure about these four :
PRECOMPILED _HEADERS : Uncheked
MFMS : Unchecked
IPP : Unchecked
Builed Opencv world : Checked
Click build again and after that click generate.
Now in directory Opencv_codeblocks a codeblock project file will be created with extension cbp. Double click on it.
Before building we have to configure Codeblocks.
Go to Settings->compiler
From Drop Down Select GNU GCC Compiler
Select option Toolchain executables
In option compiler’s installation directory choose the path “C:\TDM-GCC-64” Which is the path of installation of GCC compiler .
Click on Auto Detect. And click on OK in popup.
Go to tab Compiler Flags and Select option “Have g++ follow C++11 ISO C++ language standard [-std=c++11]”
Click OK
Now From Build option in menu bar click on Build. Or See for following symbols.
There Will Few Errors those will be shown while building :
Error 1 : strcpy_s and strcat_s are not declared in this namespace. To resolve it use the function strncpy and strncat respectively. The format of latter is different from previous one.
strncpy( szKey, icvWindowPosRootKey, 1024 );
strncat( szKey, name, 1024 );
The Error1 will be shown 4 or 5 times. So change the functions to the equivalents. Save the changes each time using Ctrl+s and click build every time you make changes to files.
Error2 : time was not found in this scope. So resolve it add header file time.h (#include )to the file top in which the error is shown. Save and Click Build again.
Go to : Build->Select Target and select “install” option.
Click Build option Again. The above process will take some time. On Successful build continue to following steps. Otherwise try to remove them if you can.
Do Some copying :
Copy opencv and opencv2 folders from “C:\opencv\build_codeblocks\install\include” to “C:\TDM-GCC-64\x86_64-w64-mingw32\include”
Copy libopencv_world343.dll.a (number 343 can change with new release of Opencv) from “C:\opencv\build_codeblocks\install\x64\mingw\lib” to “C:\TDM-GCC-64\x86_64-w64-mingw32\lib”
Copy Everything from “C:\opencv\build_codeblocks\install\x64\mingw\bin” to “C:\TDM-GCC-64\bin”
Now create a new project in codeblocks and write your code with the inclusion of required header files by your code (Read Documents of OpenCV). example code :
#include <opencv2/core/core.hpp> //additional space in header address could cause "not found" problems
#include <opencv2/highgui.hpp >
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat image1, image2;
image1 = imread("cross.png", CV_LOAD_IMAGE_COLOR);
if (!image1.data) {
cout << "could not find image1" << endl;
}
image2 = imread("cross.png", CV_LOAD_IMAGE_GRAYSCALE);
if (!image2.data) {
cout << "could not find image2" << endl;
}
cout << "opencv test" << endl;
namedWindow("Color Image", WINDOW_AUTOSIZE);
imshow("Color Image", image1);
namedWindow("Gray Scale Image", WINDOW_AUTOSIZE);
imshow("GRAY Scale Image", image2);
waitKey(0);
destroyAllWindows();
return 0;
}
Before building right click on project in left side pane and select build options.
Go to linker settings and click Add.
Write “opencv_world343” in input box and click ok. Note that 343 can change as said above. So 343 should same as the file you copied above.
Now you can build and run the code.//you can also add opencv lib and include folder in search directory like me
If you do not have to code in C++, you can install OpenCV in your Python environment using pip install opencv-python or pip install opencv-contrib-python if you also want contib module. The detailed information is here. You may also use Anaconda for installing OpenCV with command conda install -c conda-forge opencv. In my opinion, using Anaconda makes things a lot easier and I recommend it.

How to make use of OpenCV source codes instead of shared libraries

I have a project at hand which I want to use one of the opencv modules (specifically dnn).
Instead of building the dnn module I want to use the source code of this modules in my project. by doing so, I can change the source code live and see the results at the same time.
I have a very simple scenario with one only source file:
main.cpp
#include "iostream"
#include <opencv2/dnn.hpp>
int main(int argc, char *argv[])
{
std::string ConfigFile = "tsproto.pbtxt";
std::string ModelFile = "tsmodel.pb";
cv::dnn::Net net = cv::dnn::readNetFromTensorflow(ModelFile,ConfigFile);
return 0;
}
now this function "cv::dnn::readNetFromTensorflow" is in dnn module. I tried many different methods to embedded the dnn source codes inside my project but all of them failed !
for example, the first time I tried to include every cpp and hpp file in the module/dnn/ folder of opencv in my project but I ended up in errors like
/home/user/projects/Tensor/tf_importer.cpp:28: error: 'CV__DNN_EXPERIMENTAL_NS_BEGIN' does not name a type
#include "../precomp.hpp" no such file or directory
HAVE_PROTOBUF is undefined
and ....
I tried to solve these errors but some more errors just happened, more undefined MACROs and more undefined hpp files !
#include "../layers_common.simd.hpp" no such file or directory
and many many more errors !
It seems that I'm stuck in a while(true) loop of errors !!! Is it really that hard to use opencv modules source code ?
P.S.
For those who are asking about why I want to use opencv source code instead of using the shared libraries I have to say that I want to import a customized tensorflow model which opencv read function doesn't support and I want to know where exactly it crashesh so I can fix it.
By the way, I am only using c++11 functions and gcc as compiler in Ubuntu 16.04

'vector' file not found in one xcode project, but not in other

I am trying to use vectors in xcode, but it's not working in my current project. I get the error message 'vector' file not found. I have already added #include < vector >
and changed the file from .m to .mm . "The compile source as" is set to "According To File Type" and I've tried both Compilers (4.1 and GCC 4.2). I've also cleaned the project but no luck.
I made a new project and did those steps and vector works completely fine. I've even taken the same file and put it in the new project and it works.
Remove the spaces between the brackets. I.e.,
#include <vector>
not
#include < vector >

C++ Eclipse OpenCV : .exe file and binaries generated, but no image displayed

Here's my code (the first DisplayImage.cpp code in the OpenCV documentation)
/*
* DisplayImage.cpp
*
* Created on: Dec 25, 2011
* Author: Arcturus */
#include <iostream>
#include <opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv){
Mat image;
image = imread(argv[1], 1);
if(argc!=2 || !image.data){
cout<<"no image data";
return -1;
}
namedWindow("Display Image", CV_WINDOW_AUTOSIZE);
imshow("Display Image", image);
waitKey(10000);
return 0;
}
Build complete, executable generated, binaries generated.
I have my image - blackbuck.bmp- in the DisplayImage Debug folder. To run the code, I go to Run> Run Configurations. Select the DisplayImage Debug exe file, key in blackbuck.bmp (also tried it with absolute path) and run it.
On the top of the console, I get the message : DisplayImage Debug. And it displays no image at all. What could be wrong here?
I am running it on Eclipse, using CDT.
Thank you for your time!
EDIT: Problem solved!!! I had to copy all the dll files from the library folder to the folder in which my executable file was being generated. I still do not understand why, though. After all, the linker was already linking the library folder containing all the dlls. If someone could explain this, it would be of great help for future debugging. Thank you karl and mevotron for your time :)
EDIT 2: From the msdn website:
"A potential disadvantage to using DLLs is that the application is not self-contained; it depends on the existence of a separate DLL module. The system terminates processes using load-time dynamic linking if they require a DLL that is not found at process startup and gives an error message to the user. The system does not terminate a process using run-time dynamic linking in this situation, but functions exported by the missing DLL are not available to the program."
I think this answers my question. Perhaps this means eclipse uses load-time dynamic linking.
How did you compile OpenCV with MinGW (i.e., what were your BUILD_TYPE and SSE* options set to during the CMake configuration)? The reason I ask, is that there is a known bug with SSE optimizations that will cause highgui operations to crash when using MinGW built versions. See my other SO answer here.

Resources