首页 文章

VS2013与QT5.3.2使用Websocket并得到一个未解决的外部符号问题

提问于
浏览
0

我遇到了VS2013和QT5.3.2的问题 . 当我使用Websocket时,它用QWebSocket :: sendTextMessage和其他websocket函数表示未解析的外部符号 .

我已经 #include <QtWebSockets/QWebSocket> 并设置了QT项目设置并检查了WebKit和网络模块 .

这是我得到的完整错误消息:

1> mainwindow.obj:错误LNK2019:未解析的外部符号“__declspec(dllimport)public:virtual thiscall QWebSocket :: ~QWebSocket(void)”( imp _ ?? 1QWebSocket @@ UAE @ XZ),在函数“public:virtual __thiscall”中引用MWebSocket :: ~MWebSocket(void)“(?? 1MWebSocket @@ UAE @ XZ)1> MWebSocket.obj:错误LNK2001:未解析的外部符号”__declspec(dllimport)public:virtual __thiscall QWebSocket :: ~QWebSocket(void)“( __imp _ ?? 1QWebSocket @@ UAE @XZ)1> MWebSocket.obj:错误LNK2019:未解析的外部符号“declspec(dllimport)public: thiscall QWebSocket :: QWebSocket(类QString const&,enum QWebSocketProtocol :: Version,class QObject *) “(__imp _ ?? 0QWebSocket @@ QAE @ ABVQString @@ W4Version @ QWebSocketProtocol @@ PAVQObject @@@ Z),在函数”public:_thiscall MWebSocket :: MWebSocket(class QUrl const&,class QObject *)“中引用(?? 0MWebSocket @@ QAE @ ABVQUrl @@ PAVQObject @@@ Z)1> MWebSocket.obj:错误LNK2019:未解析的外部符号“declspec(dllimport)public: int64 thiscall QWeb Socket :: sendTextMessage(类QString const&)“( imp?sendTextMessage @ QWebSocket @@ QAE_JABVQString @@@ Z),在函数”private:void __thiscall MWebSocket :: onConnected(void)“中引用(?onConnected @ MWebSocket @@ AAEXXZ )1> MWebSocket.obj:错误LNK2019:未解析的外部符号“_declspec(dllimport)public:void thiscall QWebSocket :: close(enum QWebSocketProtocol :: CloseCode,class QString const&)”( imp?close @ QWebSocket @@ QAEXW4CloseCode @ QWebSocketProtocol @@ ABVQString @@@ Z),在函数“private:void __thiscall MWebSocket :: onTextMessageReceived(class QString)”中引用(?onTextMessageReceived @ MWebSocket @@ AAEXVQString @@@ Z)1> MWebSocket.obj:错误LNK2019:未解析的外部符号“_declspec(dllimport)public:void thiscall QWebSocket :: open(class QUrl const&)”( imp?open @ QWebSocket @@ QAEXABVQUrl @@@ Z),在函数“public:__thiscall MWebSocket :: MWebSocket(class QUrl)中引用const&,class QObject *)“(?? 0MWebSocket @@ QAE @ ABVQUrl @@ PAVQObject @@@ Z)1> MWebSocket.obj:erro LNK2019:未解析的外部符号“_declspec(dllimport)public:void thiscall QWebSocket :: connected(void)”( imp?connected @ QWebSocket @@ QAEXXZ),在函数“public:__thiscall MWebSocket :: MWebSocket”中引用(类QUrl const& ,类QObject *)“(?? 0MWebSocket @@ QAE @ ABVQUrl @@ PAVQObject @@@ Z)1> MWebSocket.obj:错误LNK2019:未解析的外部符号”_declspec(dllimport)public:void thiscall QWebSocket :: disconnected(void )“( imp?disconnected @ QWebSocket @@ QAEXXZ),在函数”public:__thiscall MWebSocket :: MWebSocket(class QUrl const&,class QObject *)“中引用(?? 0MWebSocket @@ QAE @ ABVQUrl @@ PAVQObject @@@ Z)1> MWebSocket.obj:错误LNK2019:未解析的外部符号“_declspec(dllimport)public:void thiscall QWebSocket :: textMessageReceived(class QString const&)”( imp?textMessageReceived @ QWebSocket @@ QAEXABVQString @@@ Z),引用在函数“private:void _thiscall MWebSocket :: onConnected(void)”(?onConnected @ MWebSocket @@ AAEXXZ)1> MWebSocket.obj:错误LN K2001:未解析的外部符号“declspec(dllimport)public:static struct QMetaObject const QWebSocket :: staticMetaObject”( imp?staticMetaObject @ QWebSocket @@ 2UQMetaObject @@ B)1> debug / \ MapleUI.exe:致命错误LNK1120:9未解析的外部

这是Websocket的代码:

//HEADER
#pragma once
#include "global.h"


class MWebSocket : public QObject
{
    Q_OBJECT
public:
    explicit MWebSocket(const QUrl &url, QObject *parent = Q_NULLPTR);

Q_SIGNALS:
    void closed();

    private Q_SLOTS:
    void onConnected();
    void onTextMessageReceived(QString message);

private:
    QWebSocket m_webSocket;
    QUrl m_url;
};



//CPP

#include "global.h"
#include "MWebSocket.h"

QT_USE_NAMESPACE

//! [constructor]
MWebSocket::MWebSocket(const QUrl &url, QObject *parent) :
QObject(parent),
m_url(url)
{
    connect(&m_webSocket, &QWebSocket::connected, this, &MWebSocket::onConnected);
    connect(&m_webSocket, &QWebSocket::disconnected, this, &MWebSocket::closed);
    m_webSocket.open(QUrl(url));
}
//! [constructor]

//! [onConnected]
void MWebSocket::onConnected()
{
    qDebug() << "WebSocket connected";
    connect(&m_webSocket, &QWebSocket::textMessageReceived,
        this, &MWebSocket::onTextMessageReceived);
    m_webSocket.sendTextMessage(QStringLiteral("H2ello, world!"));
}
//! [onConnected]

//! [onTextMessageReceived]
void MWebSocket::onTextMessageReceived(QString message)
{
    qDebug() << "Message received:" << message;
    m_webSocket.close();
}
//! [onTextMessageReceived]

有谁知道如何解决这个问题?谢谢

2 回答

  • 1

    只是发现将Qt5WebSocketsd.lib添加到项目将解决问题 . 我不知道为什么这需要手动,因为之前我使用其他库时QT5插件会自动添加它们

  • 2

    阅读f . 手册

    Header: #include <QWebSocketServer>
    qmake:  QT += websockets
    Since:  Qt 5.3
    Inherits:   QObject
    

相关问题