Basic question: Including headers with INCLUDEPATH doesn't work
-
Q_OBJECT is used by a tool called moc.exe to help make signals and slot possible
It should not to anything with regards to include files. :)
As far as I have ever seen. -
that is really annoying..
Why do those undefind reference errors appear to some of my source files but not to all of them?
Don't know where to search for an answer now -
By the way:
the problem really is Q_OBJECT...I just wrote "Q_OBJECT" into the myQString class and look what happened: undefined reference vtable ... in myQString.cpp!
So Q_OBJECT makes the problems why I have to add all headers to the project! How can I avoid this?
-
when u add Q_OBJECT, please run qmake!
-
I already tried that.
Building, running
Building, qmake, running
qmake, running
qmake, building, runningNone of the above ways succeded
-
@Binary91
then please as last test
Complete delete the build folder. -
tried that, two.
Deleted everything but my project file and the sources/headers. Didn't work :-(
Is it possible that qmake ignores INCLUDEPATH?
-
@Binary91
Well anything seems possible with your setup. :)
Q_OBJECT should not bork anything.Im out of ideas :)
-
Well, I'll post the whole project file, its headers and sources and maybe you can copy/paste it and try to run it with?
If it works, then it is a setting problem. If not, something with my include logic doesn't work.
project file:
#------------------------------------------------- # # Project created by QtCreator 2016-11-17T15:45:17 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = CourseCalculator TEMPLATE = app INCLUDEPATH += C:/Qt/lib/headers HEADERS += main.h SOURCES += main.cpp C:/Qt/lib/sources/myQString.cpp \ C:/Qt/lib/sources/myQLineEdit.cpp \ C:/Qt/lib/sources/myQPushButton.cpp
main.cpp:
// main.cpp #include "main.h" int main(int argc, char *argv[]) { QApplication applicationApp(argc, argv); clsWindowMain windowMain; QTimer::singleShot(0, &windowMain, SLOT(slotStart())); int ret = applicationApp.exec(); return ret; } main.h:
// main.h
#ifndef MAIN_H #define MAIN_H #include <QApplication> #include <QTimer> #include <QWidget> #include <QDialog> #endif // MAIN_H
myQLineEdit.h:
// myQLineEdit.h #ifndef MYQLINEEDIT_H #define MYQLINEEDIT_H #include <QDebug> #include <QLineEdit> #include <QMessageBox> #include <QDir> // forward declaration class myQLineEdit; // declaration class myQLineEdit : public QLineEdit { Q_OBJECT // .. properties public: myQLineEdit(QWidget* widgetParent = 0); ~myQLineEdit(); // .. more methods }; #endif
myQLineEdit.cpp:
// myQLineEdit.cpp #include <myQLineEdit.h> // absolute path or absolute path with whitespaces also doesn't work // ----- constructors ----- myQLineEdit::myQLineEdit(QWidget* widgetParent) : QLineEdit(widgetParent) { // stuff }
Is that compilable for you?
-
@Binary91
would be very much easier if you zipped folder and shared via dropbox or g drive as
copy paste to real files again is very error prone and time consuming :) -
Good idea. But my dropbox accout has no free memory left :-D
Have to create a new account first, maybe on g drive...
-
@Binary91
well a zipped project is ultra small. so delete/remove something for a moment and it should have space :)btw: G Drive is 15 GB but the client is nowhere near as nice as dropbox.
-
@Binary91 If you derive from Qt classes which are derived from QObject then you need to include the generated moc_ files.
For example in myQLineEdit.cpp add#include "moc_myQLineEdit.cpp"
-
but from where do I get this moc file?
If I try to include, compiler gives me an error that it can not find such file or directorybtw:
https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0 -
@Binary91 You should read the Qt documentation. The moc_ files are generated for you using moc tool. Take a look at the build directory.
-
@Binary91 Why do you have a main.h? This is quite unusual.
-
@Binary91 For QApplication you need QT += gui, else you should use QCoreApplication.
-
@jsulm , why would you include the MOC files? I "never" include the MOC files in my source because they get generated, compiled, and linked after the normal build. The only generated file I would include is the ui_NameOfForm.h file created when using the form designer. And, only in the CPP for the UI class.
@Binary91 , I am sure it was explained that INCLUDEPATH tells qmake where to find common include files. I use it for 3rd party libraries or pre-built packages I developed for Qt (I treat them like 3rd party libraries). And, as I know you know... always run qmake after changing a PRO file.
There is one curious item I have found about QtCreator though... if you are using static libraries (even if your dependencies are setup) and make a change to a CPP file in the library... Press build-all and it will build the library and NOT re-link the application or shared library that depends on that static library. Kind of annoying but I just get around it!
-
I know what moc files are, but they were not permanently created by QtCreator (not in my build folder).
But can you tell me why I should have to generate them and manually include them when it works to simply add the headers to the project?
I mean, I wanted to reduce work by using INCLUDEPATH and NOT adding all the included headers.
Generating moc files and manually adding them is not reducing but increasing work.Also I do not understand why I should include them when I don't need it if I add the headers directly...
-
@Binary91 Where is myudp.cpp ?