Настройка параметров проекта Qt в MSVC

#c #qt #visual-studio-2013

#c #qt #visual-studio-2013

Вопрос:

Я пытаюсь добавить некоторые сетевые функции в существующее приложение Qt, для которого у меня есть рабочий файл проекта MSVC. Моей отправной точкой для этого был сетевой пример «fortune server», который поставляется с установкой Qt. У меня нет проблем с компиляцией этого в Qt Creator, но в MSVC это не удается. Чтобы получить работающий проект MSVC, мне пришлось использовать плагин Qt и импортировать файл Qt Creator .pro. Это тоже работает, но проблема в том, что мне нужно изменить мой существующий проект Qt, чтобы пример «fortune server» был скомпилирован в нем. После заливки всех настроек проекта я не могу найти, где находятся соответствующие различия между рабочими и нерабочими проектами.

Я полагаю, что отсутствующие настройки должны быть эквивалентны тому, что выражено в файле .pro, что не так много:

 QT  = network widgets

HEADERS       = server.h
SOURCES       = server.cpp 
                main.cpp

# install
target.path = $$[QT_INSTALL_EXAMPLES]/network/fortuneserver
INSTALLS  = target
  

Ошибки компилятора, которые я получаю, являются базовыми, включают сбой операторов, например:

 #include <QtWidgets>
  

потому что он не может найти файл / каталог.

Я мог бы исправить это, добавив множество инструкций include (модифицированных server.cpp из приведенного примера):

 #include <QtWidgets/QWidget>
#include <QtNetwork/QtNetwork>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QHBoxLayout>
#include <QtGui/QGuiApplication>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QNetworkSession>
#include <QtGui/QStyleHints>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QMessageBox>
  

(В рабочем проекте мне не нужны все эти явные включения всех классов)

Тем не менее, он по-прежнему не компилируется, и я получаю много ошибок в соответствии с:

 Error   2   error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl qt_assert(char const *,char const *,int)" (__imp_?qt_assert@@YAXPBD0H@Z) referenced in function "public: class QObjectData * __thiscall QScopedPointer<class QObjectData,struct QScopedPointerDeleter<class QObjectData> >::operator->(void)const " (??C?$QScopedPointer@VQObjectData@@U?$QScopedPointerDeleter@VQObjectData@@@@@@QBEPAVQObjectData@@XZ)  c:Usersxxxdocumentsvisual studio 2013Projectsservertestservertestmoc_server.obj 
  

Поскольку я знаю, что код должен работать, я чувствую, что должно быть что-то тривиальное, чего мне не хватает.

Спасибо

Комментарии:

1. Вам нужно добавить необходимые модули Qt в ваш проект. Вы делаете это с помощью настроек проекта надстройки Qt.

2. какую версию плагина qt вы используете? существует новый, который работает нормально с VS2015, но пока помечен как бета-версия. В принципе, вы должны настроить плагин для использования желаемой версии qt в вашем проекте, после чего плагин позаботится о добавлении включенных каталогов и файлов библиотеки.

Ответ №1:

Похоже, вы не настроили надлежащие включаемые каталоги, каталоги библиотек и ссылки на библиотеки. Между версиями MSVC есть небольшие изменения, но вы должны иметь возможность отслеживать их, щелкнув правой кнопкой мыши по имени проекта и выбранным свойствам в окне обозревателя решений. Следующая часть немного сбивает с толку, потому что есть несколько мест, где вы можете задать следующую информацию, я попытаюсь объяснить оба.

В MSVS 2015 в свойствах конфигурации есть раздел каталогов VC . Я полагаю, что именно здесь вы задаете пути для всего решения.

  • Задайте для включенных каталогов ваш путь включения для Qt.
  • Укажите в каталогах библиотеки путь к вашему файлу библиотеки для Qt.

Это также можно настроить для каждого проекта из обозревателя решений.

  • В разделе C / C -> Общие -> Дополнительные каталоги включения
  • В разделе Компоновщик -> Общие -> Дополнительные каталоги библиотек

Также необходимо будет включить соответствующие lib-файлы.

  • В разделе Компоновщик -> Ввод -> Дополнительные зависимости

или

  • Добавьте следующий код в соответствующий файл cpp:

     #pragma comment (lib, "libfile.lib") 
      

Я рекомендую использовать настройки для каждого проекта для ваших путей включения и библиотек.

Комментарии:

1. Спасибо, это заставило его работать. Что для меня странно, так это то, что в меню параметров Qt проекта, которое генерирует плагин Qt, ни один из флажков для включения библиотек, таких как QtNetwork, не отмечен, но они все еще включены. Ну что ж.