0

I'm trying to change the user agent in Qt4.

My code: main.cpp:

#include <QApplication>
#include <QDeclarativeContext>
#include <QDeclarativeEngine>
#include "qmlapplicationviewer.h"
#include "NetworkAccessManagerFactory.h"

#ifdef DEBUG
    #include "logger.h"
#endif

Q_DECL_EXPORT int main(int argc, char *argv[])
{

    QScopedPointer<QApplication> app(createApplication(argc, argv));
    app->setOrganizationName("...");
    app->setApplicationName("...");

    QmlApplicationViewer viewer; /*and stuff related to it*/
    QString userAgent("useragentstring");

    NetworkAccessManagerFactory factory(userAgent);

    viewer.engine()->setNetworkAccessManagerFactory(&factory);

    /*showing*/

    return app->exec();
}

NetworkAccessManagerFactory.h:

#ifndef NETWORKACCESSMANAGERFACTORY_H
#define NETWORKACCESSMANAGERFACTORY_H
#include <QDeclarativeNetworkAccessManagerFactory>
#include "CustomNetworkAccessManager.h"

class NetworkAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory
{
public:
    explicit NetworkAccessManagerFactory(QString p_userAgent = "");

    QNetworkAccessManager* create(QObject* parent)
    {
        CustomNetworkAccessManager* manager = new CustomNetworkAccessManager(__userAgent, parent);
        return manager;
    }

private:
    QString __userAgent;
};

#endif // NETWORKACCESSMANAGERFACTORY_H

CustomNetworkAccessManager.h:

#ifndef CUSTOMNETWORKACCESSMANAGER_H
#define CUSTOMNETWORKACCESSMANAGER_H
#include <QNetworkAccessManager>
#include <QNetworkRequest>

class CustomNetworkAccessManager : public QNetworkAccessManager {
    Q_OBJECT
public:
    explicit CustomNetworkAccessManager(QString p_userAgent = "", QObject *parent = 0);

protected:
    QNetworkReply *createRequest( Operation op, const QNetworkRequest &req, QIODevice * outgoingData=0 )
    {

        QNetworkRequest new_req(req);
        new_req.setRawHeader("User-Agent", __userAgent.toAscii());

        QNetworkReply *reply = QNetworkAccessManager::createRequest( op, new_req, outgoingData );
        return reply;
    }

private:
    QString __userAgent;
};

#endif // CUSTOMNETWORKACCESSMANAGER_H

The errors are:

/home/marcin/proj/mobilitare/main.cpp:31: error: undefined reference to `NetworkAccessManagerFactory::NetworkAccessManagerFactory(QString)'
/home/marcin/proj/mobilitare/NetworkAccessManagerFactory.h:13: error: undefined reference to `CustomNetworkAccessManager::CustomNetworkAccessManager(QString, QObject*)'

What am I doing wrong? Thanks!

marmistrz
  • 5,974
  • 10
  • 42
  • 94
  • 6
    Where's your code for that constructor? You only have a declaration in what you posted. – Mat Nov 26 '13 at 19:30
  • Well, it's why it didn't build ;) I didn't noticed that (self-convinced that the code in bugzilla was complete) Thanks! – marmistrz Nov 30 '13 at 12:04

0 Answers0