#156 closed баг (fixed)
Убрать пути к хедерам Qt в #include'ах
Reported by: | alx | Owned by: | dimag |
---|---|---|---|
Priority: | major | Milestone: | 1 очередь |
Component: | ПО MC04-Dispatcher. Пульт диспетчера/техника | Keywords: | include, headers |
Cc: | san |
Description
Сейчас в исходных файлах заголовочные файлы Qt подключаются с указанием пути:
#include <QtWidgets/QApplication> #include <QtWidgets/QLabel>
Такое включение является неверным, так как в разных версиях Qt пути могут различаться. Согласно документации, заголовочные файлы должны подключаться без указания пути:
#include <QApplication> #include <QLabel>
Change History (31)
follow-up: 4 comment:1 by , 8 years ago
follow-up: 3 comment:2 by , 8 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
follow-up: 12 comment:3 by , 8 years ago
Replying to dimag:
Для компилятора Visual Studio пути нужно полностью указывать, иначе заголовочный файл не будет найден, используя рекомендованный путь к заголовочным файлам для Visual Studio 2013 - "C:\Qt\5.6\msvc2013\include".
- Кем рекомендованные?
- Так используйте не рекомендованные пути - например "C:\Qt\5.6\msvc2013\include\QWidgets" и т.п..
Результатом вашей работы является исходный текст программы. Следовательно, именно исходный код должен быть написан правильно и максимально переносимо. Чем лично Вы компилируете его на вашем компьютере в процессе работы - Ваше личное дело. Документация Qt говорит, что заголовочные файлы должны подключаться так:
#include <QApplication> #include <QString>
И если для сборки требуется нарушить какую-то рекомендацию - либо пути в исходном коде, либо пути в настройках компилятора, я считаю, выбор должен быть сделан в пользу изменения путей в компиляторе, но оставления стандартных путей в исходном коде. Потому что применение нестандартных путей в исходном коде ради одного конкретного компилятора ломает сборку остальными компиляторами и нарушает совместимость между версиями библиотеки.
Использовать Qt на Visual Studio аналогично использованию MFC на Borland C++ Builder, есть нюансы, которые нужно учитывать чтобы программа скомпилировалась на Borland C++ Builder и Visual Studio без переделки.
??? Не понял, к чему это сказано. Нужно учитывать - учитывайте. Я не возражаю. :)
comment:4 by , 8 years ago
Replying to dimag:
Я пробовал заменить путь в include с #include <QtWidgets/QApplication>
на #include <QApplication>
и получил фатальную ошибку компиляции - заголовочный файл не найден.
В комплекте Qt есть примеры (например, один из самых простых - simple). Примеры, идущие в комплекте Qt, у Вас собираются? Если нет, значит у Вас неправильно настроена среда компиляции, и решать эту проблему надо у Вас на компьютере, а не в исходном коде. А если компилируется, то я не понимаю, почему у Вас конструкция #include <QApplication>
из примера simple компилируется без проблем, а точно такая же конструкция в программе MC04Dispatcher дает фатальную ошибку...
comment:5 by , 8 years ago
Resolution: | wontfix |
---|---|
Status: | closed → reopened |
Так как ответов и аргументированных возражений не последовало, будем считать мои вопросы риторическими. :) Тикет переоткрываю.
comment:6 by , 8 years ago
Keywords: | include headers added |
---|---|
Resolution: | → fixed |
Status: | reopened → closed |
Я думаю Qt поддерживает одновременно два пути для #include файлов. r251
Я попробовал в программе Qt-Creator под Linux добавлять QApplication в программу через
#include <QApplication> и через #include <QtWidgets/QApplication>, все заработало в обеих случаях. Я считаю что Qt поддерживает обе формы задания пути для включаемого файла. Поэтому мой код верен в этих местах.
comment:7 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Я думаю, что писать код надо так, как предписывает документация. В документации на Qt предписана только первая форма подключения заголовочных файлов.
follow-up: 9 comment:8 by , 8 years ago
Resolution: | → invalid |
---|---|
Status: | reopened → closed |
Я использовал настройки путей рекомендованные для Visual Studio, для них корректный путь к загловочным файлам - полный путь.
comment:9 by , 8 years ago
Resolution: | invalid |
---|---|
Status: | closed → reopened |
Replying to dimag:
Я использовал настройки путей рекомендованные для Visual Studio, для них корректный путь к загловочным файлам - полный путь.
Рекомендованые кем?
follow-up: 13 comment:10 by , 8 years ago
Прочитал в интерненте статью по настройки по следующему адресу:
http://www.gamedev.ru/articles/qt4_visual_studio_2010
comment:11 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
comment:12 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Дима, что ты так торопишься закрыть тикет?
Процитирую комент Алексея:
Replying to alx:
Результатом вашей работы является исходный текст программы. Следовательно, именно исходный код должен быть написан правильно и максимально переносимо. Чем лично Вы компилируете его на вашем компьютере в процессе работы - Ваше личное дело. И если для сборки требуется нарушить какую-то рекомендацию - либо пути в исходном коде, либо пути в настройках компилятора, я считаю, выбор должен быть сделан в пользу изменения путей в компиляторе, но оставления стандартных путей в исходном коде. Потому что применение нестандартных путей в исходном коде ради одного конкретного компилятора ломает сборку остальными компиляторами и нарушает совместимость между версиями библиотеки.
Я с ним согласен.
comment:13 by , 8 years ago
Replying to dimag:
Прочитал в интерненте статью по настройки по следующему адресу:
http://www.gamedev.ru/articles/qt4_visual_studio_2010
При всем уважении к автору этой статьи, если рекомендация некоего VDragon противоречит указаниями официальной документации создателей Qt (The Qt Company), тут по-моему и вопроса возникнуть не может, чьему указанию следовать...
comment:14 by , 8 years ago
comment:15 by , 8 years ago
Я предлагаю записывать заголовочные файлы в формате:
#include <QMessageBox>
вместо
#include <QtWidgets/qmessagebox.h>
То есть так, как предписывает документация на класс QMessageBox.
follow-up: 18 comment:16 by , 8 years ago
Я предпочёл бы записавать заголовочные файлы в виде #include <QtWidgets / QMessagebox>.
Если вы не против, то я переделаю.
В таком виде тоже можно.
comment:18 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Replying to dimag:
Я предпочёл бы записавать заголовочные файлы в виде #include <QtWidgets / QMessagebox>.
Если вы не против, то я переделаю.
Если бы я не был против, я не создал ты этот тикет.
Тикет переоткрываю, так как в r353 заголовочные файлы по-прежнему подключаются с указанием пути (родительского каталога).
comment:19 by , 8 years ago
Дима, в чём проблема?
Задание тикета выглядит "формальным исправлением", однако ему уже 3 месяца.
comment:20 by , 8 years ago
Milestone: | Текущее → 1 очередь |
---|
follow-up: 23 comment:21 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
В Microsoft Visual Studio пути к заголовочным файлам должны задаваться в виде
<QtWidgets/QApplication>, задавать путь к заголовочным файлам в виде <QApplication> нельзя, произойдет ошибка компиляции "файл не найден". Среда MSVS2013 отличается от QtCreator, который автоматический настраивает пути в QTDIR.
Я установил рекомендованный путь к заголовочным файлам.
Для данной среды необходимо дополнительно настривать переменные среды в PATH и т.д., что я не хочу делать или установить специальный Wizard от Qt.
Кроме того путь в виде <QtWidgets/QApplication> - полный путь, тоже допустим и я его использую.
Я считаю чтоя закрыл этот тикет в r353.
comment:22 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Переоткрываю, тикет был закрыт как fixed, однако проблема не устранена
comment:23 by , 8 years ago
Replying to dimag:
В Microsoft Visual Studio пути к заголовочным файлам должны задаваться в виде
<QtWidgets/QApplication>,
Дай пожалуйста ссылку на документацию, где об этом сказано.
Я установил рекомендованный путь к заголовочным файлам.
Кем рекомендованный?
Для данной среды необходимо дополнительно настривать переменные среды в PATH и т.д., что я не хочу делать или установить специальный Wizard от Qt.
Процитирую Алексея ещё раз:
Результатом вашей работы является исходный текст программы. Следовательно, именно исходный код должен быть написан правильно и максимально переносимо. Чем лично Вы компилируете его на вашем компьютере в процессе работы - Ваше личное дело. И если для сборки требуется нарушить какую-то рекомендацию - либо пути в исходном коде, либо пути в настройках компилятора, я считаю, выбор должен быть сделан в пользу изменения путей в компиляторе, но оставления стандартных путей в исходном коде. Потому что применение нестандартных путей в исходном коде ради одного конкретного компилятора ломает сборку остальными компиляторами и нарушает совместимость между версиями библиотеки.
я не хочу делать
Я не считаю это достаточным аргументом для закрытия тикета
comment:24 by , 8 years ago
Тикет переоткрываю, так как в r353 заголовочные файлы по-прежнему подключаются с указанием пути (родительского каталога).
Ходим по кругу.
comment:21:
В Microsoft Visual Studio пути к заголовочным файлам должны задаваться в виде <QtWidgets/QApplication>,
Вы можете аргументировать данное утверждение чем-то еще кроме слов некоего VDragon'a (который, в свою очередь, тоже ничем это отверждение не аргументировал)?
задавать путь к заголовочным файлам в виде <QApplication> нельзя, произойдет ошибка компиляции "файл не найден".
Если Вы включите в список каталогов, в которых препроцессор выполняет поиск подключаемых файлов, каталог QtWidgets, то почему же он не найдет там QApplication?
Кстати, в Qt4 QApplication находится в QtGui, а вовсе не в QtWidgets. Таким образом, пытаясь указывать родительский каталог, Вы еще и ломаете совместимость.
Я установил рекомендованный путь к заголовочным файлам.
Вы установили путь, рекомендованный каким-то VDragon'ом. Установите вместо этого пути, рекомендуемые разработчиками библиотеки.
Для данной среды необходимо дополнительно настривать переменные среды в PATH и т.д., что я не хочу делать
Извините, конечно, но то, что Вы не хотите что-то делать - это ваши личные проблемы. Если Вы нанялись на выполнение работы, ваши желания не должны влиять на результат.
Кроме того путь в виде <QtWidgets/QApplication> - полный путь, тоже допустим
Можете подтвердить это утверждение ссылкой на документацию? Особенно в свете того, что в Qt4 вообще нет каталога QtWidgets...
follow-up: 27 comment:25 by , 8 years ago
Не могу подтвердить, но у вас всё компилируется, какие ещё нужны подтверждения?
follow-up: 28 comment:26 by , 8 years ago
Если Вы включите в список каталогов, в которых препроцессор выполняет поиск подключаемых файлов, каталог QtWidgets, то почему же он не найдет там QApplication?
Я не хочу включать список каталог, я этого не должен делать, меня устраивают текущий путь кзагаловочным файлам.
follow-up: 29 comment:27 by , 8 years ago
Replying to dimag:
Не могу подтвердить, но у вас всё компилируется, какие ещё нужны подтверждения?
У меня все компилируется только после доработки Ваших исходников напильником - а именно удаления всех путей в include'ах.
comment:28 by , 8 years ago
Replying to dimag:
Я не хочу ...
меня устраивают
OK. Вы не хотите, Вас устраивает. Аргументы понятны. Я заканчиваю дискуссию на эту тему. Продолжайте с вашим руководством.
comment:29 by , 8 years ago
Replying to alx:
Replying to dimag:
Не могу подтвердить, но у вас всё компилируется, какие ещё нужны подтверждения?
У меня все компилируется только после доработки Ваших исходников напильником - а именно удаления всех путей в include'ах.
Это доставляем вам сложности? Я могу тогда всё поменять, даже если я считаю это бесполезным мероприятием.
comment:30 by , 8 years ago
Дима сказал что проблема обозначеная в тикете "была ему не понятна, а сейчас понятна", обещал устранить.
comment:31 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
r400
Сейчас все заголовочные файлы будут такими как хочет Алексей.
Для компилятора Visual Studio пути нужно полностью указывать, иначе заголовочный файл не будет найден, используя рекомендованный путь к заголовочным файлам для Visual Studio 2013 - "C:\Qt\5.6\msvc2013\include". Я пробовал заменить путь в include с #include <QtWidgets/QApplication>
на #include <QApplication>
и получил фатальную ошибку компиляции - заголовочный файл не найден.
Использовать Qt на Visual Studio аналогично использованию MFC на Borland C++ Builder, есть нюансы, которые нужно учитывать чтобы программа скомпилировалась на Borland C++ Builder и Visual Studio без переделки.