Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Basic question: Including headers with INCLUDEPATH doesn't work
Forum Updated to NodeBB v4.3 + New Features

Basic question: Including headers with INCLUDEPATH doesn't work

Scheduled Pinned Locked Moved General and Desktop
50 Posts 5 Posters 31.0k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    Binary91
    wrote on last edited by
    #17

    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?

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #18

      when u add Q_OBJECT, please run qmake!

      1 Reply Last reply
      2
      • B Offline
        B Offline
        Binary91
        wrote on last edited by
        #19

        I already tried that.
        Building, running
        Building, qmake, running
        qmake, running
        qmake, building, running

        None of the above ways succeded

        mrjjM 1 Reply Last reply
        0
        • B Binary91

          I already tried that.
          Building, running
          Building, qmake, running
          qmake, running
          qmake, building, running

          None of the above ways succeded

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #20

          @Binary91
          then please as last test
          Complete delete the build folder.

          1 Reply Last reply
          0
          • B Offline
            B Offline
            Binary91
            wrote on last edited by
            #21

            tried that, two.

            Deleted everything but my project file and the sources/headers. Didn't work :-(

            Is it possible that qmake ignores INCLUDEPATH?

            mrjjM 1 Reply Last reply
            1
            • B Binary91

              tried that, two.

              Deleted everything but my project file and the sources/headers. Didn't work :-(

              Is it possible that qmake ignores INCLUDEPATH?

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #22

              @Binary91
              Well anything seems possible with your setup. :)
              Q_OBJECT should not bork anything.

              Im out of ideas :)

              1 Reply Last reply
              0
              • B Offline
                B Offline
                Binary91
                wrote on last edited by Binary91
                #23

                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?

                mrjjM 1 Reply Last reply
                0
                • B Binary91

                  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?

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #24

                  @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 :)

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    Binary91
                    wrote on last edited by
                    #25

                    Good idea. But my dropbox accout has no free memory left :-D

                    Have to create a new account first, maybe on g drive...

                    mrjjM jsulmJ 2 Replies Last reply
                    0
                    • B Binary91

                      Good idea. But my dropbox accout has no free memory left :-D

                      Have to create a new account first, maybe on g drive...

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by mrjj
                      #26

                      @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.

                      1 Reply Last reply
                      1
                      • B Binary91

                        Good idea. But my dropbox accout has no free memory left :-D

                        Have to create a new account first, maybe on g drive...

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #27

                        @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"
                        

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        1
                        • B Offline
                          B Offline
                          Binary91
                          wrote on last edited by Binary91
                          #28

                          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 directory

                          btw:
                          https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0

                          jsulmJ 4 Replies Last reply
                          0
                          • B Binary91

                            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 directory

                            btw:
                            https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #29

                            @Binary91 You should read the Qt documentation. The moc_ files are generated for you using moc tool. Take a look at the build directory.

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            0
                            • B Binary91

                              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 directory

                              btw:
                              https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0

                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by
                              #30

                              @Binary91 Why do you have a main.h? This is quite unusual.

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0
                              • B Binary91

                                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 directory

                                btw:
                                https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #31

                                @Binary91 For QApplication you need QT += gui, else you should use QCoreApplication.

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                0
                                • BuckwheatB Offline
                                  BuckwheatB Offline
                                  Buckwheat
                                  wrote on last edited by
                                  #32

                                  @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!

                                  Dave Fileccia

                                  jsulmJ 1 Reply Last reply
                                  1
                                  • B Offline
                                    B Offline
                                    Binary91
                                    wrote on last edited by
                                    #33

                                    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...

                                    jsulmJ 1 Reply Last reply
                                    0
                                    • B Binary91

                                      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 directory

                                      btw:
                                      https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0

                                      jsulmJ Offline
                                      jsulmJ Offline
                                      jsulm
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #34

                                      @Binary91 Where is myudp.cpp ?

                                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      jsulmJ 1 Reply Last reply
                                      0
                                      • jsulmJ jsulm

                                        @Binary91 Where is myudp.cpp ?

                                        jsulmJ Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #35

                                        @jsulm With some fixes I can build your project.
                                        pro file:

                                        QT       += core network
                                        
                                        QT       -= gui
                                        
                                        TARGET = test
                                        CONFIG   += console
                                        CONFIG   -= app_bundle
                                        
                                        TEMPLATE = app
                                        
                                        INCLUDES += lib/headers/myQLineEdit.h
                                        
                                        SOURCES += main.cpp \
                                            #myudp.cpp
                                        
                                        #HEADERS += \
                                        #    myudp.h
                                        

                                        main.cpp

                                        #include <QCoreApplication>
                                        
                                        int main(int argc, char *argv[])
                                        {
                                          QCoreApplication applicationApp(argc, argv);
                                          //clsWindowMain windowMain;
                                        
                                          //QTimer::singleShot(0, &windowMain, SLOT(slotStart()));
                                          int ret = applicationApp.exec();
                                          return ret;
                                        }
                                        

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        1 Reply Last reply
                                        1
                                        • B Binary91

                                          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...

                                          jsulmJ Offline
                                          jsulmJ Offline
                                          jsulm
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #36

                                          @Binary91 Where I did say you have to create moc_ files manually?
                                          They are generated for you. And they are completely unrelated to your problem!

                                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                                          1 Reply Last reply
                                          1

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved