Ответы пользователя по тегу Qt
  • Ошибка D8021 недопустимый числовой аргумент "/Wno-error=invalid-offsetof" откуда может появиться данная проблема и как решить?

    @Ariox41
    Строка
    set(CMAKE_PREFIX_PATH "C:\\Qt\\6.1.3\\mingw81_64\\lib\\cmake")

    намекает, что вы пытаетесь подключить бинарники, скомпилированные при помощи mingw, к проекту, собираемому при помощи msvc. Это в любом случае не сработает, ABI несовместимы.

    В данном случае это также может быть причиной ошибки, т.к. вы подключаете файлы конфигурации cmake, которые содержат флаги компилятора, которые при сборке были прописаны как публичная зависимость. Флаги от mingw, естественно, недопустимы для msvc.

    Проще говоря, либо установите версию Qt, соответствующую вашему компилятору, либо установите msys2, и используйте mingw + Qt из пакетов (но для mingw нет QWebEngine).
    Ответ написан
  • Как учить C++ программисту который не учился в вузе в данной сфере?

    @Ariox41
    По стандартной библиотеке могу посоветовать "Стандартная библиотека C++. Справочное руководство". Я, правда, читал только первое издание (сейчас актуально второе), но вряд ли она стала сильно хуже. Ну и cppreference.com для изучения стандартной библиотеки тоже полезен.

    По многопоточности однозначно стоит почитать "Параллельное программирование на С++ в действии. Практика разработки многопоточных программ" - язык там может и не самый простой, но там хорошо описаны как библиотека поддержки потоков, так и основы модели памяти (в связи с атомарными переменными).

    По остальным запросам сложнее - всё сильно зависит от текущего уровня знаний и от цели изучения. Возможно, стоит начать с книг для новичков, где объясняются основы языка (тут много вопросов про такие книги). Но наверняка большая часть изложенной в них информации вам уже знакома, при этом часто в таких книгах приводятся не лучшие способы решения задач. Шлее неплохой выбор для новичка в C++, знакомого с другими ЯП, но он всё же больше о C++ в экосистеме Qt, с точки зрения чистого C++ там хватает недостатков.

    Можно попробовать почитать Майерса ("Эффективное использование C++. 50 рекомендаций..." и/или "35 рекомендаций", не стоит начинать с последних книг). Они могут оказаться слишком сложными, но отвечают на большую часть ваших запросов (или хотя бы станет понятно, куда копать дальше и нужно ли оно вам). Там некоторые вещи однозначно будут непонятны, но при первом прочтении их можно просто пропустить - главы слабо связаны между собой. Меня в своё время книги Майерса мотивировали изучать C++ всерьёз (до этого выбирал между C++ и Java), на тот момент я знал C++ на уровне C с классами.
    Ответ написан
    4 комментария
  • Как правильно использовать QWidget в QML?

    @Ariox41
    В строке w = new QPushButton; не указан родитель, а значит кнопка создаётся для цикла событий основного потока. Однако QML может работать в своём собственном потоке (с которым связан свой цикл событий), из-за чего кнопка создаётся в потоке QML, но для цикла событий основного потока. Об этом и написано в сообщении об ошибке. Должна помочь передача родителя, работающего в потоке QML: w = new QPushButton(this);. При этом кнопка будет использовать цикл событий родителя (this уже от своего родителя знает, в каком он потоке).
    Ответ написан
  • Unittests в Qt, как правильно организовать структуру проекта?

    @Ariox41
    Каждый набор тестов в QTest обычно создается как отдельный подпроект (приложение). Соответственно, и запускаются тесты как отдельное приложения. Выбор текущего активного проекта для запуска в QtCreator осуществляется через панель "проекты" слева, или по "ctrl + T", это относится и к тестам. В принципе, тесты можно сосредоточить и в одном проекте, но это крайне неудобно как раз из-за проблемы, с которой вы столкнулись. Для такой конфигурации лучше подходит Catch. QtCreator вроде бы умеет запускать все тесты одновременно, но я этим не пользовался.
    Ответ написан
    Комментировать
  • Как подключить библиотеку boost для Android в Qt?

    @Ariox41
    Под android не работал, но судя по всему строка
    LIBS += C:/qt_projects/-----X-----/boost/1.59.0/libs
    лишняя.

    Возможно, ниже нужно писать что-то вроде
    contains(ANDROID_TARGET_ARCH,x86) {
        ANDROID_EXTRA_LIBS += \
            L"C:/qt_projects/-----X-----/boost/1.59.0/libs/x86/gnu-5/" \
            lboost_atomic \
            lboost_chrono \
            ..........
    }
    по аналогии со стандартным для qmake добавлением в LIBS (Lпуть - путь к каталогу с либами, lназвание - название библиотеки без lib и .so)

    Также не стоит подключать все либы boost сразу, большая часть вам не нужна.

    И да, boost и Qt отлично друг с другом уживаются.
    Ответ написан