Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt Creator and other tools
  4. unable to find header file referenced from ui_widget.h
QtWS25 Last Chance

unable to find header file referenced from ui_widget.h

Scheduled Pinned Locked Moved Solved Qt Creator and other tools
17 Posts 3 Posters 4.4k Views
  • 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.
  • C Offline
    C Offline
    Colins2
    wrote on last edited by
    #1

    Qt Creator 9.0.1 / Qt 6.4.0 on Linux Mint.

    I am following a course on GUI development, written for Qt 5 but I can make most things work with slight adjustments.

    I created a project (following the course) that is a widget app with a small window containing 2 custom widgets.
    The logic controls these 2 widgets. This all works fine with just some minor adjustments required.

    The following project took exactly the same code and modified it very slightly to promote the custom widgets for use directly in the GUI. This all appears to work as per the course but when I save and try to build I get an error that cannot find file "indicator.h" referenced in ui_widget.h and the compilation stops. The other widget was named waterTank.
    I checked all the files in the project, including ui_widget.h, widget.ui, CMakeLists.txt and the relevant *.cpp files and the 'missing file' is in all of the source files, spelled properly and of course the file does exist in the source directory.
    I can see no reason why the compiler or MOC or UIC cannot find the file.
    I experimented with names and it seems that the first of the promoted widgets gets ignored, while subsequent ones are OK.
    I removed the indicator widget from the form and the other one, waterTank, gave the error. This was then the only widget.

    This behaviour only seems to happen when custom widgets are promoted. Normal laying out of built-in widgets works fine.

    Has anyone else experienced this?

    C 1 Reply Last reply
    0
    • C Colins2

      Qt Creator 9.0.1 / Qt 6.4.0 on Linux Mint.

      I am following a course on GUI development, written for Qt 5 but I can make most things work with slight adjustments.

      I created a project (following the course) that is a widget app with a small window containing 2 custom widgets.
      The logic controls these 2 widgets. This all works fine with just some minor adjustments required.

      The following project took exactly the same code and modified it very slightly to promote the custom widgets for use directly in the GUI. This all appears to work as per the course but when I save and try to build I get an error that cannot find file "indicator.h" referenced in ui_widget.h and the compilation stops. The other widget was named waterTank.
      I checked all the files in the project, including ui_widget.h, widget.ui, CMakeLists.txt and the relevant *.cpp files and the 'missing file' is in all of the source files, spelled properly and of course the file does exist in the source directory.
      I can see no reason why the compiler or MOC or UIC cannot find the file.
      I experimented with names and it seems that the first of the promoted widgets gets ignored, while subsequent ones are OK.
      I removed the indicator widget from the form and the other one, waterTank, gave the error. This was then the only widget.

      This behaviour only seems to happen when custom widgets are promoted. Normal laying out of built-in widgets works fine.

      Has anyone else experienced this?

      C Offline
      C Offline
      Colins2
      wrote on last edited by
      #2

      Just as a follow up:
      I created a new widget project with 3 other widgets - all just shells that did nothing except get created and then die.
      I named the widgets Awidget, Bwidget and Cwidget.
      I created an horizontal layout with 3 widgets, all blank.
      This compiled and ran just showed a blank window as you would expect.
      Then I promoted each of the form widgets to Awidget, Bwidget and Cwidget and saved.
      Sure enough, I got the not found error with atestwidget.h.
      Then I removed the Awidget completely and got the same result with Bwidget as shown

      58e97a88-53ad-4c0b-b39f-7e11520683ed-image.png

      JonBJ 1 Reply Last reply
      0
      • C Colins2

        Just as a follow up:
        I created a new widget project with 3 other widgets - all just shells that did nothing except get created and then die.
        I named the widgets Awidget, Bwidget and Cwidget.
        I created an horizontal layout with 3 widgets, all blank.
        This compiled and ran just showed a blank window as you would expect.
        Then I promoted each of the form widgets to Awidget, Bwidget and Cwidget and saved.
        Sure enough, I got the not found error with atestwidget.h.
        Then I removed the Awidget completely and got the same result with Bwidget as shown

        58e97a88-53ad-4c0b-b39f-7e11520683ed-image.png

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by
        #3

        @Colins2
        You may know more than I. But:

        • These are "issues" detected by the IDE editor. Can you do an actual compile and show the compiler messages?

        • Which of a/b/ctestwidget.h files actually exist?

        • Can you show some code from ui_widget.h file, at least to see where/what order it #includes?

        C 1 Reply Last reply
        0
        • JonBJ JonB

          @Colins2
          You may know more than I. But:

          • These are "issues" detected by the IDE editor. Can you do an actual compile and show the compiler messages?

          • Which of a/b/ctestwidget.h files actually exist?

          • Can you show some code from ui_widget.h file, at least to see where/what order it #includes?

          C Offline
          C Offline
          Colins2
          wrote on last edited by
          #4

          @JonB

          1. That's what I thought, there is no actual code/compiler error.
          2. All 3 files exist. The classes don't do anything, just generate a widget.
          3. The code is short so here is the whole ui_widget.h
            /********************************************************************************
            ** Form generated from reading UI file 'widget.ui'
            **
            ** Created by: Qt User Interface Compiler version 6.4.0
            **
            ** WARNING! All changes made in this file will be lost when recompiling UI file!
            ********************************************************************************/
            #ifndef UI_WIDGET_H
            #define UI_WIDGET_H

          #include <QtCore/QVariant>
          #include <QtWidgets/QApplication>
          #include <QtWidgets/QHBoxLayout>
          #include <QtWidgets/QWidget>
          #include "atestwidget.h"
          #include "btestwidget.h"
          #include "ctestwidget.h"

          QT_BEGIN_NAMESPACE

          class Ui_Widget
          {
          public:
          QHBoxLayout *horizontalLayout_2;
          QHBoxLayout *horizontalLayout;
          ATestwidget *Awidget;
          BtestWidget *Bwidget;
          CtestWidget *Cwidget;

          void setupUi(QWidget *Widget)
          {
              if (Widget->objectName().isEmpty())
                  Widget->setObjectName("Widget");
              Widget->resize(603, 408);
              horizontalLayout_2 = new QHBoxLayout(Widget);
              horizontalLayout_2->setObjectName("horizontalLayout_2");
              horizontalLayout = new QHBoxLayout();
              horizontalLayout->setObjectName("horizontalLayout");
              Awidget = new ATestwidget(Widget);
              Awidget->setObjectName("Awidget");
          
              horizontalLayout->addWidget(Awidget);
          
              Bwidget = new BtestWidget(Widget);
              Bwidget->setObjectName("Bwidget");
          
              horizontalLayout->addWidget(Bwidget);
          
              Cwidget = new CtestWidget(Widget);
              Cwidget->setObjectName("Cwidget");
          
              horizontalLayout->addWidget(Cwidget);
          
          
              horizontalLayout_2->addLayout(horizontalLayout);
          
          
              retranslateUi(Widget);
          
              QMetaObject::connectSlotsByName(Widget);
          } // setupUi
          
          void retranslateUi(QWidget *Widget)
          {
              Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
          } // retranslateUi
          

          };

          namespace Ui {
          class Widget: public Ui_Widget {};
          } // namespace Ui

          QT_END_NAMESPACE

          #endif // UI_WIDGET_H

          C JonBJ 2 Replies Last reply
          0
          • C Colins2

            @JonB

            1. That's what I thought, there is no actual code/compiler error.
            2. All 3 files exist. The classes don't do anything, just generate a widget.
            3. The code is short so here is the whole ui_widget.h
              /********************************************************************************
              ** Form generated from reading UI file 'widget.ui'
              **
              ** Created by: Qt User Interface Compiler version 6.4.0
              **
              ** WARNING! All changes made in this file will be lost when recompiling UI file!
              ********************************************************************************/
              #ifndef UI_WIDGET_H
              #define UI_WIDGET_H

            #include <QtCore/QVariant>
            #include <QtWidgets/QApplication>
            #include <QtWidgets/QHBoxLayout>
            #include <QtWidgets/QWidget>
            #include "atestwidget.h"
            #include "btestwidget.h"
            #include "ctestwidget.h"

            QT_BEGIN_NAMESPACE

            class Ui_Widget
            {
            public:
            QHBoxLayout *horizontalLayout_2;
            QHBoxLayout *horizontalLayout;
            ATestwidget *Awidget;
            BtestWidget *Bwidget;
            CtestWidget *Cwidget;

            void setupUi(QWidget *Widget)
            {
                if (Widget->objectName().isEmpty())
                    Widget->setObjectName("Widget");
                Widget->resize(603, 408);
                horizontalLayout_2 = new QHBoxLayout(Widget);
                horizontalLayout_2->setObjectName("horizontalLayout_2");
                horizontalLayout = new QHBoxLayout();
                horizontalLayout->setObjectName("horizontalLayout");
                Awidget = new ATestwidget(Widget);
                Awidget->setObjectName("Awidget");
            
                horizontalLayout->addWidget(Awidget);
            
                Bwidget = new BtestWidget(Widget);
                Bwidget->setObjectName("Bwidget");
            
                horizontalLayout->addWidget(Bwidget);
            
                Cwidget = new CtestWidget(Widget);
                Cwidget->setObjectName("Cwidget");
            
                horizontalLayout->addWidget(Cwidget);
            
            
                horizontalLayout_2->addLayout(horizontalLayout);
            
            
                retranslateUi(Widget);
            
                QMetaObject::connectSlotsByName(Widget);
            } // setupUi
            
            void retranslateUi(QWidget *Widget)
            {
                Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
            } // retranslateUi
            

            };

            namespace Ui {
            class Widget: public Ui_Widget {};
            } // namespace Ui

            QT_END_NAMESPACE

            #endif // UI_WIDGET_H

            C Offline
            C Offline
            Colins2
            wrote on last edited by
            #5

            @JonB
            Here's the compiler output:

            19:17:12: Running steps for project Promote-test...
            19:17:12: Starting: "/home/colins2/Qt6/Tools/CMake/bin/cmake" --build /home/colins2/Qt6-Programs/build-Promote-test-Desktop_Qt_6_4_0_GCC_64bit-Debug --target all
            [1/4 46.7/sec] Automatic MOC and UIC for target Promote-test
            [2/3 11.6/sec] Building CXX object CMakeFiles/Promote-test.dir/widget.cpp.o
            FAILED: CMakeFiles/Promote-test.dir/widget.cpp.o
            /usr/bin/g++ -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -I/home/colins2/Qt6-Programs/build-Promote-test-Desktop_Qt_6_4_0_GCC_64bit-Debug/Promote-test_autogen/include -isystem /home/colins2/Qt6/6.4.0/gcc_64/include/QtCore -isystem /home/colins2/Qt6/6.4.0/gcc_64/include -isystem /home/colins2/Qt6/6.4.0/gcc_64/mkspecs/linux-g++ -isystem /home/colins2/Qt6/6.4.0/gcc_64/include/QtWidgets -isystem /home/colins2/Qt6/6.4.0/gcc_64/include/QtGui -DQT_QML_DEBUG -g -fPIC -std=gnu++17 -MD -MT CMakeFiles/Promote-test.dir/widget.cpp.o -MF CMakeFiles/Promote-test.dir/widget.cpp.o.d -o CMakeFiles/Promote-test.dir/widget.cpp.o -c /home/colins2/Qt6-Programs/Promote-test/widget.cpp
            In file included from /home/colins2/Qt6-Programs/Promote-test/widget.cpp:2:
            /home/colins2/Qt6-Programs/build-Promote-test-Desktop_Qt_6_4_0_GCC_64bit-Debug/Promote-test_autogen/include/./ui_widget.h:16:10: fatal error: atestwidget.h: No such file or directory
            16 | #include "atestwidget.h"
            | ^~~~~~~~~~~~~~~
            compilation terminated.
            ninja: build stopped: subcommand failed.
            19:17:12: The process "/home/colins2/Qt6/Tools/CMake/bin/cmake" exited with code 1.
            Error while building/deploying project Promote-test (kit: Desktop Qt 6.4.0 GCC 64bit)
            When executing step "Build"
            19:17:12: Elapsed time: 00:00.

            atestwidget.h does exist, as do the other widget header files.

            1 Reply Last reply
            0
            • C Colins2

              @JonB

              1. That's what I thought, there is no actual code/compiler error.
              2. All 3 files exist. The classes don't do anything, just generate a widget.
              3. The code is short so here is the whole ui_widget.h
                /********************************************************************************
                ** Form generated from reading UI file 'widget.ui'
                **
                ** Created by: Qt User Interface Compiler version 6.4.0
                **
                ** WARNING! All changes made in this file will be lost when recompiling UI file!
                ********************************************************************************/
                #ifndef UI_WIDGET_H
                #define UI_WIDGET_H

              #include <QtCore/QVariant>
              #include <QtWidgets/QApplication>
              #include <QtWidgets/QHBoxLayout>
              #include <QtWidgets/QWidget>
              #include "atestwidget.h"
              #include "btestwidget.h"
              #include "ctestwidget.h"

              QT_BEGIN_NAMESPACE

              class Ui_Widget
              {
              public:
              QHBoxLayout *horizontalLayout_2;
              QHBoxLayout *horizontalLayout;
              ATestwidget *Awidget;
              BtestWidget *Bwidget;
              CtestWidget *Cwidget;

              void setupUi(QWidget *Widget)
              {
                  if (Widget->objectName().isEmpty())
                      Widget->setObjectName("Widget");
                  Widget->resize(603, 408);
                  horizontalLayout_2 = new QHBoxLayout(Widget);
                  horizontalLayout_2->setObjectName("horizontalLayout_2");
                  horizontalLayout = new QHBoxLayout();
                  horizontalLayout->setObjectName("horizontalLayout");
                  Awidget = new ATestwidget(Widget);
                  Awidget->setObjectName("Awidget");
              
                  horizontalLayout->addWidget(Awidget);
              
                  Bwidget = new BtestWidget(Widget);
                  Bwidget->setObjectName("Bwidget");
              
                  horizontalLayout->addWidget(Bwidget);
              
                  Cwidget = new CtestWidget(Widget);
                  Cwidget->setObjectName("Cwidget");
              
                  horizontalLayout->addWidget(Cwidget);
              
              
                  horizontalLayout_2->addLayout(horizontalLayout);
              
              
                  retranslateUi(Widget);
              
                  QMetaObject::connectSlotsByName(Widget);
              } // setupUi
              
              void retranslateUi(QWidget *Widget)
              {
                  Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
              } // retranslateUi
              

              };

              namespace Ui {
              class Widget: public Ui_Widget {};
              } // namespace Ui

              QT_END_NAMESPACE

              #endif // UI_WIDGET_H

              JonBJ Offline
              JonBJ Offline
              JonB
              wrote on last edited by JonB
              #6

              @Colins2 said in unable to find header file referenced from ui_widget.h:

              That's what I thought, there is no actual code/compiler error.

              Ohhh! So this is only the code helper in the editor? Then you don't have a real problem.

              But earlier you said:

              I get an error that cannot find file "indicator.h" referenced in ui_widget.h and the compilation stops

              That is during compilation after all? can you please be 100% clear about whether you have (a) an editor-only warning message inside the IDE or (b) a genuine error from running the compiler?

              If it's IDE code model only, I think that sometimes gets itself wrong. You could try cleaning everything out --- any cached files? .pro.user, I don't know?) and/or seeing whether it sorts itself out over time....

              Ah, now I think I understand:

              • You get an editor "no file" on btestwidget.h.
              • You get a compiler "no file" on atestwidget.h

              I only trust compiler messages! Sort that out first, before confusing it with whatever the editor warnings are saying. Your ui_widget.h is not going to be in same directory as *testwidget.h is it? ui_....h file is generated into build output directory (for debug or release). Not sure what compiler options tell it to look back in source directory to file .h files.

              That's all I know, obviously I don't know your exact situation.

              C 1 Reply Last reply
              0
              • JonBJ JonB

                @Colins2 said in unable to find header file referenced from ui_widget.h:

                That's what I thought, there is no actual code/compiler error.

                Ohhh! So this is only the code helper in the editor? Then you don't have a real problem.

                But earlier you said:

                I get an error that cannot find file "indicator.h" referenced in ui_widget.h and the compilation stops

                That is during compilation after all? can you please be 100% clear about whether you have (a) an editor-only warning message inside the IDE or (b) a genuine error from running the compiler?

                If it's IDE code model only, I think that sometimes gets itself wrong. You could try cleaning everything out --- any cached files? .pro.user, I don't know?) and/or seeing whether it sorts itself out over time....

                Ah, now I think I understand:

                • You get an editor "no file" on btestwidget.h.
                • You get a compiler "no file" on atestwidget.h

                I only trust compiler messages! Sort that out first, before confusing it with whatever the editor warnings are saying. Your ui_widget.h is not going to be in same directory as *testwidget.h is it? ui_....h file is generated into build output directory (for debug or release). Not sure what compiler options tell it to look back in source directory to file .h files.

                That's all I know, obviously I don't know your exact situation.

                C Offline
                C Offline
                Colins2
                wrote on last edited by
                #7

                @JonB
                I guess I didn't explain it too well.
                Yes, the ui_widget.h file is in the build directory, where you would expect.
                The original post showed the error on btestwidget as I had already deleted atestwidget to test my theory.

                The 2nd code I re-created the gui with the 3 widgets and promoted them and, as you can see, it is now the atestwidget that gets ignored. If I delete both atestwidget and btestwidget then ctestwidget gets ignored, i.e. the first entry.

                Something isn't right.

                I would mention that all the code in this test application, apart from the names and the creation of the objects, is generated by Qt.
                There is no other code anywhere.

                JonBJ 1 Reply Last reply
                0
                • C Colins2

                  @JonB
                  I guess I didn't explain it too well.
                  Yes, the ui_widget.h file is in the build directory, where you would expect.
                  The original post showed the error on btestwidget as I had already deleted atestwidget to test my theory.

                  The 2nd code I re-created the gui with the 3 widgets and promoted them and, as you can see, it is now the atestwidget that gets ignored. If I delete both atestwidget and btestwidget then ctestwidget gets ignored, i.e. the first entry.

                  Something isn't right.

                  I would mention that all the code in this test application, apart from the names and the creation of the objects, is generated by Qt.
                  There is no other code anywhere.

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #8

                  @Colins2
                  I think what you are saying about "first, second, third" widget and "gets ignored" is a red herring. I suspect you simply only get an error on the first problem it encounters, they all have the same issue but you just don't get subsequent errors about the other ones?

                  Simplify your situation to a single promoted class, get that working, then try multiple promotes.

                  I suspect an old post like https://stackoverflow.com/questions/4907766/promoting-widgets-in-qt-creator I came across is linked to your issue? First ensure you have added to HEADERS like it says. Then try to figure how wherever the ui_....h file is it will know to find atestwidget.h which is in your "source" directory? Maybe play with .pro file's INCLUDEPATH so it has the absolute path to prove that can make it work, then figure what you're really supposed to do after that?

                  If it's all different because you are using cmake that is beyond my ken. Maybe something like https://stackoverflow.com/questions/24222057/error-for-compiling-qt-gui-with-cmake-along-with-promoted-widget is saying you need to do something to get cmake stuff/compilatuon look in the source directory? Maybe Googling qt promote widget cmake provides some useful links?

                  That's all I know. Another person here may know more about this Promoting issue.

                  C 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @Colins2
                    I think what you are saying about "first, second, third" widget and "gets ignored" is a red herring. I suspect you simply only get an error on the first problem it encounters, they all have the same issue but you just don't get subsequent errors about the other ones?

                    Simplify your situation to a single promoted class, get that working, then try multiple promotes.

                    I suspect an old post like https://stackoverflow.com/questions/4907766/promoting-widgets-in-qt-creator I came across is linked to your issue? First ensure you have added to HEADERS like it says. Then try to figure how wherever the ui_....h file is it will know to find atestwidget.h which is in your "source" directory? Maybe play with .pro file's INCLUDEPATH so it has the absolute path to prove that can make it work, then figure what you're really supposed to do after that?

                    If it's all different because you are using cmake that is beyond my ken. Maybe something like https://stackoverflow.com/questions/24222057/error-for-compiling-qt-gui-with-cmake-along-with-promoted-widget is saying you need to do something to get cmake stuff/compilatuon look in the source directory? Maybe Googling qt promote widget cmake provides some useful links?

                    That's all I know. Another person here may know more about this Promoting issue.

                    C Offline
                    C Offline
                    Colins2
                    wrote on last edited by Colins2
                    #9

                    @JonB
                    Yes, you were right about the file getting ignored. It stops compliation on the first header that it can't find.
                    So that clears that point up - doesn't help me but it's one less thing to worry about.
                    None of the promoted classes will work but when demoted back to QWidgets, they work fine.

                    I'll check those other links but I thought I'd try here first to see if anyone else had come across the problem.
                    Thanks for your input.

                    1 Reply Last reply
                    0
                    • Christian EhrlicherC Online
                      Christian EhrlicherC Online
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on last edited by
                      #10

                      Please provide a minimal, compilable example - not three widgets and a lot of unneeded stuff... you most likely don't link against the library where your widgets are in or don't properly specify the target_include_directories() for this/those libraries. If I'm right it has nothing to do with promoting widgets but simply on how to link against a library with cmake and specific the correct include paths for this library.

                      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                      Visit the Qt Academy at https://academy.qt.io/catalog

                      C 1 Reply Last reply
                      1
                      • Christian EhrlicherC Christian Ehrlicher

                        Please provide a minimal, compilable example - not three widgets and a lot of unneeded stuff... you most likely don't link against the library where your widgets are in or don't properly specify the target_include_directories() for this/those libraries. If I'm right it has nothing to do with promoting widgets but simply on how to link against a library with cmake and specific the correct include paths for this library.

                        C Offline
                        C Offline
                        Colins2
                        wrote on last edited by
                        #11

                        @Christian-Ehrlicher
                        Thanks for your reply.
                        The 3 widgets were necessary, I thought, to emphasize the point but as JonB pointed out, it fails on the first error, no matter how many widgets are promoted.
                        It has nothing to do with libraries or include directories, this is just basic stuff almost entirely generated by QtCreator.
                        The solution is to put the FULL path of the include file in the promote box and then it works. It should not be necessary but obviously one of the compilers, UIC maybe, doesn't read the CMakeLists.txt file to find where the files are, at least on Linux.
                        The instructor on the course I am following does not do this, he simply leaves the generated header file name in the box but I think he is using Windows. I will also put this to him and see what his response is.
                        This does appear to have been a problem for more than 10 years, reading stackoverflow but I'll mark it as solved now as this workaround works.

                        Christian EhrlicherC JonBJ 2 Replies Last reply
                        0
                        • C Colins2

                          @Christian-Ehrlicher
                          Thanks for your reply.
                          The 3 widgets were necessary, I thought, to emphasize the point but as JonB pointed out, it fails on the first error, no matter how many widgets are promoted.
                          It has nothing to do with libraries or include directories, this is just basic stuff almost entirely generated by QtCreator.
                          The solution is to put the FULL path of the include file in the promote box and then it works. It should not be necessary but obviously one of the compilers, UIC maybe, doesn't read the CMakeLists.txt file to find where the files are, at least on Linux.
                          The instructor on the course I am following does not do this, he simply leaves the generated header file name in the box but I think he is using Windows. I will also put this to him and see what his response is.
                          This does appear to have been a problem for more than 10 years, reading stackoverflow but I'll mark it as solved now as this workaround works.

                          Christian EhrlicherC Online
                          Christian EhrlicherC Online
                          Christian Ehrlicher
                          Lifetime Qt Champion
                          wrote on last edited by Christian Ehrlicher
                          #12

                          @Colins2 said in unable to find header file referenced from ui_widget.h:

                          The solution is to put the FULL path of the include file in the promote box and then it works. It should not be necessary but obviously one of the compilers, UIC maybe, doesn't read the CMakeLists.txt file to find where the files are, at least on Linux.

                          This is plain wrong- it has to do with the correct target_include_directories() calls.

                          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                          Visit the Qt Academy at https://academy.qt.io/catalog

                          C 1 Reply Last reply
                          1
                          • C Colins2

                            @Christian-Ehrlicher
                            Thanks for your reply.
                            The 3 widgets were necessary, I thought, to emphasize the point but as JonB pointed out, it fails on the first error, no matter how many widgets are promoted.
                            It has nothing to do with libraries or include directories, this is just basic stuff almost entirely generated by QtCreator.
                            The solution is to put the FULL path of the include file in the promote box and then it works. It should not be necessary but obviously one of the compilers, UIC maybe, doesn't read the CMakeLists.txt file to find where the files are, at least on Linux.
                            The instructor on the course I am following does not do this, he simply leaves the generated header file name in the box but I think he is using Windows. I will also put this to him and see what his response is.
                            This does appear to have been a problem for more than 10 years, reading stackoverflow but I'll mark it as solved now as this workaround works.

                            JonBJ Offline
                            JonBJ Offline
                            JonB
                            wrote on last edited by JonB
                            #13

                            @Colins2 said in unable to find header file referenced from ui_widget.h:

                            The solution is to put the FULL path of the include file in the promote box and then it works

                            As @Christian-Ehrlicher says. I suggested you test whether that would make the compilation work, so that we could confirm that was the issue. The https://stackoverflow.com/questions/24222057/error-for-compiling-qt-gui-with-cmake-along-with-promoted-widget I referenced offers:

                            include_directories(${CMAKE_CURRENT_SOURCE_DIR})
                            include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
                            include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/jir_seg)
                            

                            or @Christian-Ehrlicher's target_include_directories, something like that looks preferable.

                            1 Reply Last reply
                            0
                            • Christian EhrlicherC Christian Ehrlicher

                              @Colins2 said in unable to find header file referenced from ui_widget.h:

                              The solution is to put the FULL path of the include file in the promote box and then it works. It should not be necessary but obviously one of the compilers, UIC maybe, doesn't read the CMakeLists.txt file to find where the files are, at least on Linux.

                              This is plain wrong- it has to do with the correct target_include_directories() calls.

                              C Offline
                              C Offline
                              Colins2
                              wrote on last edited by
                              #14

                              @Christian-Ehrlicher
                              I will gladly try another approach.
                              Following advice on stackoverflow from many years ago I added
                              include_directories (${PROJECT_SOURCE_DIR}) to my CMakeLists.txt file and that worked. With all the other automatic or templated functions that happen without any user input, I find it strange to have to add this manually.
                              There used to be a template file where you could set default values for CMakeLists like CXX_STANDARD etc. Where is that file now, I can't find one anywhere?

                              Christian EhrlicherC 1 Reply Last reply
                              2
                              • C Colins2

                                @Christian-Ehrlicher
                                I will gladly try another approach.
                                Following advice on stackoverflow from many years ago I added
                                include_directories (${PROJECT_SOURCE_DIR}) to my CMakeLists.txt file and that worked. With all the other automatic or templated functions that happen without any user input, I find it strange to have to add this manually.
                                There used to be a template file where you could set default values for CMakeLists like CXX_STANDARD etc. Where is that file now, I can't find one anywhere?

                                Christian EhrlicherC Online
                                Christian EhrlicherC Online
                                Christian Ehrlicher
                                Lifetime Qt Champion
                                wrote on last edited by
                                #15

                                @Colins2 said in unable to find header file referenced from ui_widget.h:

                                There used to be a template file where you could set default values for CMakeLists like CXX_STANDARD etc. Where is that file now, I can't find one anywhere?

                                There is no such a file.

                                If you want to add an include path you hjave to use target_include_directories (include_directories should be avoided) - but that's also true for qmake.

                                Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                                Visit the Qt Academy at https://academy.qt.io/catalog

                                C 1 Reply Last reply
                                0
                                • Christian EhrlicherC Christian Ehrlicher

                                  @Colins2 said in unable to find header file referenced from ui_widget.h:

                                  There used to be a template file where you could set default values for CMakeLists like CXX_STANDARD etc. Where is that file now, I can't find one anywhere?

                                  There is no such a file.

                                  If you want to add an include path you hjave to use target_include_directories (include_directories should be avoided) - but that's also true for qmake.

                                  C Offline
                                  C Offline
                                  Colins2
                                  wrote on last edited by
                                  #16

                                  @Christian-Ehrlicher
                                  All working now, thanks for your help.
                                  This is the first time I have ever had to use this command in Qt. Previously I've only used the target_link_libraries command with all source files and header files found from the automatically created ${PROJECT_SOURCES}.
                                  I guess it would be good practise to always add this line in future projects.

                                  JonBJ 1 Reply Last reply
                                  0
                                  • C Colins2

                                    @Christian-Ehrlicher
                                    All working now, thanks for your help.
                                    This is the first time I have ever had to use this command in Qt. Previously I've only used the target_link_libraries command with all source files and header files found from the automatically created ${PROJECT_SOURCES}.
                                    I guess it would be good practise to always add this line in future projects.

                                    JonBJ Offline
                                    JonBJ Offline
                                    JonB
                                    wrote on last edited by
                                    #17

                                    @Colins2 said in unable to find header file referenced from ui_widget.h:

                                    This is the first time I have ever had to use this command in Qt

                                    I think the difference is: In normal circumstances the ui_....h file, generated into the build output directory, has no #include "yourfile.h" lines in it, as it is standalone and does not reference any of your source headers. So it does not need to know where your source directory is. However, because you used a Promoted widget, generated into the source directory, it does need to #include "atestwidget.h" for the definition of the promoted widget it contains. So that is why it needs the path to that directory in this situation, but maybe not other cases.

                                    1 Reply Last reply
                                    2

                                    • Login

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