#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, не отмечен, но они все еще включены. Ну что ж.