Qt не видит заголовочные файлы
Установлен Qt 5.8.0.
Проблема появилась ещё в R8, в R7 все нормально.
Проблема именно на 64-битной версии, на 32-битной этой проблемы нет.
Нужные заголовочники-либы установленны! Программа компилируется, просто Qt не хочет их видеть.
Проблема явно не в Qt, пробовал разные версии, опять же повторю - R7 все нормально, так же как и в 32-битной версии, в OpenSUSE все нормально, проблема где то в ROSA.
Только не предлагайте скопировать в папку Qt все заголовочники, этот кустарный метод хоть и сработает но это сами понимаете что так не должно быть, Qt не хочет с системы подхватывать заголовочники.
Как решить эту проблему?
Всмысле не правильно? На более старых роса да и на suse, все работает, а тут я значит путь не правильно указываю? Почему эта ошибка появилась ещё в роса r8, эта проблема только в роса в других дистрах и старых росах такой чуши нет.
Qt всегда сам из системы все подхватывал, повторю ещё раз: эта фигня появилась ещё в ROSA R8 на 64-битной версии, на 32-битных все само подхватывает из системы так как это и должно быть в принципе.
Можете по подробнее?
Особенность Мандривы/Росы в том, что 64-битные либы называются как lib64qt*-devel, а не libqt*-devel. Может быть, в этом дело?
Особенность Мандривы/Росы в том, что 64-битные либы называются как lib64qt*-devel, а не libqt*-devel. Может быть, в этом дело?
Причем здесь lib64qt*-devel, если речь идет о встроенных либах с++, Qt все свое прекрасно видит.
Ведь в R7 небыло такой чуши и все прекрасно было.
------------
Нужно было мне сразу в тексте написать подробнее а не скриншотом часть проблемы показывать)))), я имею ввиду именно инклуды плюсов.
------------
Satana_00 писал(а): Установлен Qt 5.8.0.
Проблема появилась ещё в R8, в R7 все нормально.
Проблема именно на 64-битной версии, на 32-битной этой проблемы нет.
Нужные заголовочники-либы установленны! Программа компилируется, просто Qt не хочет их видеть.
Проблема явно не в Qt, пробовал разные версии, опять же повторю - R7 все нормально, так же как и в 32-битной версии, в OpenSUSE все нормально, проблема где то в ROSA.
Только не предлагайте скопировать в папку Qt все заголовочники, этот кустарный метод хоть и сработает но это сами понимаете что так не должно быть, Qt не хочет с системы подхватывать заголовочники.
Как решить эту проблему?
А напишите точный порядок воспроизведения ошибки. Программы-то в репозиториях как-то собрались, значит компилятор все нашел.
keleg писал(а): А напишите точный порядок воспроизведения ошибки. Программы-то в репозиториях как-то собрались, значит компилятор все нашел.
Речь идет не про компилятор, а про IDE (qt-creator). IDE не видит системных заголовочных файлов, например iostream.
Воспроизвести просто. Объявите любую системную библиотеку (не Qt, а из C++) и посмотрите как IDE себя поведет. Будет ли она давать подсказки из этого файла?
Сравните результаты с IDE которая была в R8.1 (возможно на чистом R8.1 такой же баг, так что лучше на R7)
Еще раз обращаю внимание, что речь идет только о IDE. В при самой сборке все include подключаются корректно. Точнее, на том примере что я тестировал. Пока, к сожалению, R9 не пользуюсь, не могу точно сказать где еще проявляется баги, я только пытаюсь помочь автору этого топика. Ну и конечно же мне это тоже в последствии скажется.
Что за ерунда? Имеется проект с Cmake на борту. я его открываю в Qt Creator(версия 3.5 с чем-то по моему). Открываю с помощью открытия файла CMakeLists.txt в корне проекта.
Всё хорошо, всё компилится и работает. Но вот в Qt никак не отображаются файлы .h
Как мне сделать так, чтобы в дереве проекта они отображались?
ЧЯДНТ? Гугль не помог(даже не подозреваю, куда гуглить надо)
а в cmakelists.txt они точно есть?
include_directories(.) возможно, это то, что тебе нужно.
в include_directories() прописана вся папка с хедерами. но в креаторе не видно ни одного хедера
да, есть. иначе бы не компилилось, и юзаю include_directories()
не помогает этот метод
Хедеры нужно добавлять в цели компиляции. Типа такого:
правильно я понимаю?
1) ДОписываем по Вашему экзамплу в проект.
2) Прогоняем cmake по-новой
3) Хедеры появляются в дереве проекта. Всё верно?
Ну, да. Я не помню деталей уже, но вроде это все что требуется.
попробуй что oh-la-la предложил на одном хедере и расскажешь, чем закончится :)
Спасибо большое! Это работает! Теперь внимание другой вопрос : можно ли так подключить все хедеры из этой папки(включая хедеры из вложенных папок) ? Просто руками всё это очень долго будет писать : там много хедеров
Qtc, в отличии от того же CLion, ничего ни за кого не выдумывает.
Поэтому показывает только те файлы, которые добавленны как сорцы к цели. Если ты хочешь показывать хидеры - либо добавь их к соответсвующей цели, как исходники, либо сделай фейковую цель, и добавь их к ней.
google:// glob cmake
Помниться ты уже поднимал такую тему.
нет, Вы меня с кем-то путаете. За ссылку спасибо большое
Проблема решена посредством применения File(GLOB ..) и add_executable.
Буду дальше знакомиться с cmake.
Если кто предложит более хорошее решение - буду рад его узнать.
Проблема решена посредством применения File(GLOB ..) и add_executable.
Буду дальше знакомиться с cmake.
Если кто предложит более хорошее решение - буду рад его узнать.
Решено!
Тут проблема не в CMake, а в том, что QtCreator не считает заголовочные файлы, отсутствующие в CmakeLists.txt частью проекта. Существует альтернативная реализация менеджера проектов CMake для QtCreator, возможно там поведение другое.
m0rph ★★★★★ ( 07.09.15 23:49:38 )
Последнее исправление: m0rph 07.09.15 23:50:17 (всего исправлений: 1)
CMake это кроссплатформа, поэтому, в той же студии - проблема повториться. А также в Code::Blocks, KDevelop(если они всё не испортили), Eclipse, и любой другой фигне, где кто то не насмотрелся на Jb и не накостылил.
Qtc в данном случае прав. Ибо фактически, нигде нет инфо об инклудах, их можно конечно, показыать наугад, все подряд, но качественно показывать только то, что используется в текущей конфиграции не выйдет, без дополнительного анализа кодовой базы, что в принципе разные задачи с управлением проектом и сборкой.
Проблема решена посредством применения File(GLOB ..) и add_executable
Дурацкое решение. Захочешь добавить новый файл - надо перезапускать cmake, и это не единственный минус.
Сам я вместо добавления файлов в add_executable добавлял фейковую цель, которая не собирается.
Установлен Qt 5.8.0.
Проблема появилась ещё в R8, в R7 все нормально.
Проблема именно на 64-битной версии, на 32-битной этой проблемы нет.
Нужные заголовочники-либы установленны! Программа компилируется, просто Qt не хочет их видеть.
Проблема явно не в Qt, пробовал разные версии, опять же повторю - R7 все нормально, так же как и в 32-битной версии, в OpenSUSE все нормально, проблема где то в ROSA.
Только не предлагайте скопировать в папку Qt все заголовочники, этот кустарный метод хоть и сработает но это сами понимаете что так не должно быть, Qt не хочет с системы подхватывать заголовочники.
Как решить эту проблему?
Всмысле не правильно? На более старых роса да и на suse, все работает, а тут я значит путь не правильно указываю? Почему эта ошибка появилась ещё в роса r8, эта проблема только в роса в других дистрах и старых росах такой чуши нет.
Qt всегда сам из системы все подхватывал, повторю ещё раз: эта фигня появилась ещё в ROSA R8 на 64-битной версии, на 32-битных все само подхватывает из системы так как это и должно быть в принципе.
Можете по подробнее?
Особенность Мандривы/Росы в том, что 64-битные либы называются как lib64qt*-devel, а не libqt*-devel. Может быть, в этом дело?
Особенность Мандривы/Росы в том, что 64-битные либы называются как lib64qt*-devel, а не libqt*-devel. Может быть, в этом дело?
Причем здесь lib64qt*-devel, если речь идет о встроенных либах с++, Qt все свое прекрасно видит.
Ведь в R7 небыло такой чуши и все прекрасно было.
------------
Нужно было мне сразу в тексте написать подробнее а не скриншотом часть проблемы показывать)))), я имею ввиду именно инклуды плюсов.
------------
Satana_00 писал(а): Установлен Qt 5.8.0.
Проблема появилась ещё в R8, в R7 все нормально.
Проблема именно на 64-битной версии, на 32-битной этой проблемы нет.
Нужные заголовочники-либы установленны! Программа компилируется, просто Qt не хочет их видеть.
Проблема явно не в Qt, пробовал разные версии, опять же повторю - R7 все нормально, так же как и в 32-битной версии, в OpenSUSE все нормально, проблема где то в ROSA.
Только не предлагайте скопировать в папку Qt все заголовочники, этот кустарный метод хоть и сработает но это сами понимаете что так не должно быть, Qt не хочет с системы подхватывать заголовочники.
Как решить эту проблему?
А напишите точный порядок воспроизведения ошибки. Программы-то в репозиториях как-то собрались, значит компилятор все нашел.
keleg писал(а): А напишите точный порядок воспроизведения ошибки. Программы-то в репозиториях как-то собрались, значит компилятор все нашел.
Речь идет не про компилятор, а про IDE (qt-creator). IDE не видит системных заголовочных файлов, например iostream.
Воспроизвести просто. Объявите любую системную библиотеку (не Qt, а из C++) и посмотрите как IDE себя поведет. Будет ли она давать подсказки из этого файла?
Сравните результаты с IDE которая была в R8.1 (возможно на чистом R8.1 такой же баг, так что лучше на R7)
Еще раз обращаю внимание, что речь идет только о IDE. В при самой сборке все include подключаются корректно. Точнее, на том примере что я тестировал. Пока, к сожалению, R9 не пользуюсь, не могу точно сказать где еще проявляется баги, я только пытаюсь помочь автору этого топика. Ну и конечно же мне это тоже в последствии скажется.
How can I tell Qt Creator 2.4.1 (based on Qt 4.7.4 32-bit) where to look by default for header files?
When I open a C file in Qt Creator and say
it underlines the line and says
I would like to tell it to look for headers in a directory of my choice; how do I do this?
7 Answers 7
I had the same problem as well. The reason was that I use two computers in parallel and the makefile tried to find files at paths as they are set on the previous one. But everything seemed to be fine - as in your case, tooltip when hovering over the include showed me the correct path, also F2 (follow symbol under cursor) navigated me to the correct header.
I thought qmake is re-maked each time I change something in the .pro file, but obviously not.
Just run Build->qmake, it should fix it.
You need to update the qmake file.
add in .pro INCLUDEPATH += $$_PRO_FILE_PWD_
This solved my problem. The project was working well weeks but when I changed compilation kit, one header file was not found anymore. Adding this INCLUDEPATH to *.pro file solved the problem but I do not still understand what happened and why the change had to be done?
I have this issue from time to time, mostly when I make a pull request or copy code around.
The easy solution is to delete all qt generated files, and Build->qmake then Rebuild all.
This is a Qt Bug that it does not properly identify files that need to be regenerated and, even though the IDE links everything nicely, that error happens at compile time. The same happens when it generates ui_formname.h header files, some changes are not made effective straight away.
Sometimes, restarting the QtCreator is necessary. Doing the deleting and restarting always solves this exact issue.
Have a nice day!
The file is not in your include path.
The HEADERS part of a pro file lists header files that the project depends on. These files are considered for processing by moc if they have the Q_OBJECT macro in the class definition. Adding a file to HEADERS does not put it in the include search path.
You also have a stray header (ewrappersubclass.h) because you forgot to escape the end of line.
I've added a screenshot so you can see that I did in fact type the case correctly. My INCLUDESPATH does not need to add the StdAfx.h because I am including it with Shared/StdAfx.h . Any idea why this is happening?
You should look at the Makefile generated with qmake to find out what include path is given to the compiler
Update
I guess I should also ask: Is this even possible? Or must I create an entire project every time I want to edit a standalone C++ file?
Qt Creator is for writing C++ code with the Qt framework. I guess I just don't understand why you're going to all the trouble to avoid the framework the IDE was designed to be used with.
@Sosukodo: Qt Creator is an awesome IDE in its own right, outside of all it Qt specific functionality.
You may want to modify the Qt Creator source to fit your needs because Qt Creator was not designed to do what you're asking.
@Sosukodo What does that matter? The OP has an issue where the header files are not being located by QT Creator. Who cares what he is trying to do in this case.
Update
I guess I should also ask: Is this even possible? Or must I create an entire project every time I want to edit a standalone C++ file?
Qt Creator is for writing C++ code with the Qt framework. I guess I just don't understand why you're going to all the trouble to avoid the framework the IDE was designed to be used with.
@Sosukodo: Qt Creator is an awesome IDE in its own right, outside of all it Qt specific functionality.
You may want to modify the Qt Creator source to fit your needs because Qt Creator was not designed to do what you're asking.
@Sosukodo What does that matter? The OP has an issue where the header files are not being located by QT Creator. Who cares what he is trying to do in this case.
6 Answers 6
I found myself often faced with this problem. I can reproduce it on my machine right now as well (Mac OS).
It looks like QtCreator needs to have a project to correctly handle GCC path analysis (on top of Qt frameworks paths).
The process Qt uses to find the headers is that it launches GCC (or your compiler on Windows) with special arguments that make it output the paths where the compiler finds its headers. BUT, to do that, it must have a project associated to your files, because it uses this project to determine what toolchain to use, thus where GCC is found.
So the answer is this: create a project, always, to use the syntax analyzis.
Note that it is quite important that when you create this project, you define which version of the Qt SDK and the toolchain you'll use, otherwise the syntax control-click won't work.
Note that I personnally use this method, with a .pro file that simply lists all the subdirectories of my project, and with all keyboard shortcuts to build disabled, so that I only use Qt Creator as an editor. The syntax highlighting/linking is awesome and exceptionnally quick, far, far quicker than Eclipse!
To do that, simply issue qmake -pro in the directory of your project. It will create a [DIR].pro file that you can remove any time.
error Cannot open include file: 'StdAfx.h': No such file or directory.
EDIT: why I am getting downvotes? This is a legitimate problem I'm having
@john it's currently in shared/stdafx.h but to be honest I've copied it and pasted in both the root and the shared folder just to test if it was because I had some syntax wrong. Nope, it doesn't recognize it even when its in both folders
I don't know QT but have you tried adding the directory with stdafx.h to INCLUDEPATH, something like INCLUDEPATH += $$PWD
Читайте также: