Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt using CMake: ui_mainwindow.h: No such file or directory

Tags:

qt

qt-creator

moc

I use Qt with CMake because CMake integrates with my team's work easier than my own. I have frequently encountered an error along the lines of

ui_*.h: No such file or directory

Usually when my project already has a ui_*.h file to start with it will just modify that .h file. I do use the below commands in my CMake file, so it should be wrapping my .ui file with the appropriate ui_*.h file.

qt4_wrap_ui (mainwindow  mainwindow.ui)
target_linked_library (mainwindow ${QT_LIBRARIES})

But sometimes that doesn't work and I have to completely rebuild the entire ui_*.h file. What am I doing wrong?

like image 431
Daniel Arnett Avatar asked May 25 '16 20:05

Daniel Arnett


3 Answers

For anyone having this problem in the future. I pretty much followed the demo here.

http://doc.qt.io/qt-5/cmake-manual.html

Adding, the following line to the CMakeLists.txt should get rid of this problem.

set(CMAKE_AUTOUIC ON)

From the CMake documentation at

https://cmake.org/cmake/help/v3.0/prop_tgt/AUTOUIC.html

AUTOUIC is a boolean specifying whether CMake will handle the Qt uic code generator automatically, i.e. without having to use the QT4_WRAP_UI() or QT5_WRAP_UI() macro. Currently Qt4 and Qt5 are supported.

One small note, this property is available in CMake versions 3.0.2+. So below that, @rbaleksandar's solution should be more appropriate.

Hope that helps.

like image 50
Sami Avatar answered Sep 22 '22 02:09

Sami


The quick solution is to use UIC. In bash navigate to the directory containing your *.ui file and run (for the mainwindow.ui example)

uic mainwindow.ui -o ui_mainwindow.h

and then move the newly generated ui_mainwindow.h file to your build directory.

mv ui_mainwindow.h ../build_Qt_4_8_5-Debug/

You shouldn't see the 'No such file or directory' error anymore and can confidently move on to the many other wonderful errors to find in the world of Qt with CMake.

like image 33
Daniel Arnett Avatar answered Sep 22 '22 02:09

Daniel Arnett


If I remember correctly you actually have to add your UI files to the add_executable(...) like this:

qt4_wrap_ui(UI_HEADERS mainwindow.ui ...) # Add all UI files here like you've done it
...
add_executable(${PROJECT_NAME} ${SRC} ${UI_HEADERS}) # Add them to the executable
...

After all UI files are actually converted to header and source files, which naturally have to be compiled along with the rest of your code.

like image 35
rbaleksandar Avatar answered Sep 22 '22 02:09

rbaleksandar