Автозаполнение Qt Creator (intellisense) не работает для элементов std :: vector
Как сделать так, чтобы автозаполнение в Qt Creator работало для std::vector ? Это нормально, чтобы это не работало?
Например, на новом новом проекте я создаю struct foo < int bar; >; , Если я создаю QVector для foo, intellisense / autocomplete работает нормально:
Но для std::vector v2 Ничего не произошло после того, как я нажму точку в v2[0].
Я нахожусь на Qt Creator 3.3.0, использующем цепочку инструментов компилятора Visual Studio (поэтому STL исходит от VS, а не от gcc, если это имеет какое-то значение).
Редактировать: Я нашел сообщение об ошибке (об итераторах) — https://bugreports.qt.io/browse/QTCREATORBUG-1892 . Я также воспроизвожу эту проблему.
Изменить 2: Я протестировал с пользовательским шаблоном класса:
И работает нормально
Решение
Согласно моим комментариям, это просто невозможно сделать. Вы можете отправить отчет об ошибке и надеяться, что они исправят это.
Чтобы объяснить лучше, это как-то связано с реализацией std :: vector:
В котором reference Тип определен как Allocator::reference , Судя по всему, у Qt Creator возникли проблемы, связанные с этим в исходном классе.
Сравните это с QVector’s …
…который определяется непосредственно в терминах Т&и вы можете понять, почему это работает для него.
Обновление: Глядя в Страница cppreference на вектор , похоже, что после C ++ 11 ссылка должна быть определена как просто value_type&, Я пытался строить с CONFIG += c++11 и это все еще не работает, как бы то ни было.
И еще одно обновление: удалось кодировать минимальный тестовый пример, который не работает
Другие решения
Теперь доступна модель кода лягушки:
Перейдите в Справка-> О плагинах … -> включить ClangCodeModel
Перезапустите Qt Creator. Убедитесь, что он активирован;
Сервис -> C ++ -> Модель кода
Автозаполнение кода вуаля для std: vector.
Мне удалось упростить пример кода @ Cassio для воспроизведения проблемы:
Источник
Автозаполнение Qt Creator
Я использую QtCreator в Windows уже несколько дней и планирую использовать его в качестве основной IDE для написания кода на C ++ (сейчас я не буду использовать библиотеку Qt).
Хотя я очень скучаю по автозаполнению Visual Studio, особенно при вводе функции.
Я пытался использовать Clang Code Model, но, похоже, это не помогло мои «проблемы», которые :
1. Автозаполнение Qt не так реактивно, как Visual Studio;
2. Если кто-то начинает вводить функцию и ее первый аргумент появляется до появления списка аргументов, нужно удалить открывающую скобку и немного подождать, пока она в конце концов не появится;
3. Список аргументов и поле автозаполнения не могут быть показаны одновременно;
4. Обычно вам нужно вручную включить автозаполнение нажатием Ctrl + пробел.
Решение
Я довольно часто использовал Qt Creator и Visual Studio. ИМХО, они оба сопоставимы. Ctrl + Space прекрасно работает для меня … Я почти никогда не парю мышью, чтобы вызвать информацию о функции. Я думаю, что есть аналогичная комбинация клавиш в Visual Studio. Интеграция с библиотеками Qt, сигналами, слотами и дизайнером делает Qt Creator потрясающим. Я не чувствовал, что Qt Creator был медленным или быстрым по сравнению с Visual Studio.
Мне нравятся сочетания клавиш по умолчанию в Qt лучше, чем значения по умолчанию VS, поэтому в итоге я переназначил большинство сочетаний клавиш в Visual Studio, связанных со сборкой, запуском, отступом и комментарием.
Все параметры, связанные с автозаполнением, можно найти в разделе:
Похоже, это может быть связано со слишком многими .pro.user файлы в папке.
Надеюсь, это поможет.
PS — Библиотеки Qt, их документация и сообщество вокруг них потрясающие и заслуживают изучения.
Источник
Qt creator автодополнение кода не работает
Такая проблема. Если я в голом проекте после #include попытаюсь после ввода fsca набрать ctrl+space, то в окне автодополнений не появится выбор fscanf, приходится набирать его вручную, в том числе и по памяти все аргументы. Однако, функции, работающие с whar_t автодополняются перфектно. Например, wprintf, fwscanf и т.д.
Но мне удобнее работать с char, т.к. некотороые библиотеки рассчитаны именно на него. Вопрос именно в автодополнении, т.к. всё компилируется нормально.
При этом интересно вот что: если я после #include пропишу #include , то все char функции нормально дополняются. Можно, конечно, сделать такой финт: вначале проекта проинклудить заголовок , далее работать нормально со всеми возможностями автодополнения, а затем непосредственно перед компиляцией закомментировать этот iostream, но это костыль. У кого-нибудь есть идеи, почему во всех иде, даже изначально не заточенных под C/C++, работает автодополнение, а у QT Creator нет. При этом исследовал откуда берёт ИДЕ заголовок cstdio и выяснил, что оттуда же, откуда все другие иде. Пробовал также инклудить непосредственно — не сработало. Работаю, если что, под Gentoo + KDE
Я сталкивался с подобной проблемой, не с автодополнением, но с вызовом кастомной контекстной справки «Пост на форуме»:http://qt-project.org/forums/viewthread/257/
Ноги по-моему растут из одного и того-же места 🙂
В конце темы даже создали баг «QTCREATORBUG-5948»:https://bugreports.qt-project.org/browse/QTCREATORBUG-5948 , но так как это не критично, его просто закрыли.
Основное объяснение такое:
For example, for the math functions abs() and sqrt() the context help works only if is included and recognized by QtCreator (cmath.h must be in the PATH or in INCLUDEPATH of the *.pro project file).
Источник
Qt Creator 3.6: автодополнение кода и анализ синтаксиса.
Вопрос скорее к IDE. В Qt часто работаешь с перечислениями, определёнными внутри классов, и вызывает некоторые вопросы ситуация, когда автозавершение кода возвращает не только элементы перечисления, но и все функции/объекты, находящиеся в классе. Возможно ли исправить это и заставить автокомплит возвращать только элементы перечисления?
И по поводу поддержки C++14: в редакторе [[deprecated]], числа с разделителями разрядов подчёркиваются как ошибочные конструкции, хотя всё и компилируется. Можно ли как-то исправить это?
Знаю, вопросы мелочные, но всё же было приятно их разрешить.
1) Пример кода можно?
2) Нет. Ждите обновлений.
Попробуй включить clang code model.
В Qt часто работаешь с перечислениями, определёнными внутри классов, и вызывает некоторые вопросы ситуация, когда автозавершение кода возвращает не только элементы перечисления, но и все функции/объекты, находящиеся в классе.
Если это перечисления в твоих классах, используй enum class .
В моих я давно уже пользуюсь этим, но в классах Qt обычные перечисления и понятно, почему. enum class не поддерживают по умолчанию битовых операций, да и захламлять перегрузками пространство имён не есть гуд. А может, просто поленились. В любом случае, автокомплит мог бы поделикатней обрабатывать перечисления.
Введите QAbstractSocket::SocketError:: и посмотрите, что выдаст автокомплит.
Заведите тикет в багтрекере, вкиньте ссылку на ЛОР, заинтересованные проголосуют.
В стандартной модели кода куча багов (особенно с C++11 и выше). Можно включить clang code model, но она работает намного медленнее.
Проблемма также в том, что у Qt в тех классах, что содержат enum зачастую есть функции, возвращающие значения этих enum .
Источник