Hello, I have modifed the my implementation of QDeclarativeNetworkAccessManagerFactory (question follows code) :)
MyNetworkAccessManagerFactory.h =========================== class MyNetworkAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory { public: MyNetworkAccessManagerFactory(); ~MyNetworkAccessManagerFactory(); public: QNetworkAccessManager* create ( QObject * parent ); }; MyNetworkAccessManagerFactory.cpp ============================= MyNetworkAccessManagerFactory::MyNetworkAccessManagerFactory() { } MyNetworkAccessManagerFactory::~MyNetworkAccessManagerFactory() { } QNetworkAccessManager* MyNetworkAccessManagerFactory::create ( QObject* parent ) { QNetworkProxy proxy; proxy.setHostName("my.proxy.com"); proxy.setPort(3128); // Is this static method call acceptable for a re-entrant method? // QNetworkProxy::setApplicationProxy(proxy); QNetworkAccessManager* nam = new QNetworkAccessManager(parent); nam->setProxy(proxy); return nam; } I have a question about ensuring the method create(QObject* parent) is thread safe / re-entrant: I assumed the method call 'QNetworkProxy::setApplicationProxy(proxy);' is not ok since it is static and should not be called from a re-entrant function. Is this the case? If so, is it a problem that it is not called? I made the changes, but I still don't see the webpage loaded in the QML document, but I'll deal with that after I know my code is correct first :) On Tue, Apr 27, 2010 at 2:19 AM, Martin Jones <martin.jo...@nokia.com>wrote: > On Tue, 27 Apr 2010 01:18:56 am ext Jack Wootton wrote: > > Hi, > > > > I'm trying to set some proxy settings for a QML application - it's not > > working as expected. I'm unsure the API is being used correctly, can > > someone check my code makes sense? There are 3 files: main.cpp, > > MyNetworkAccessManagerFactory.h and MyNetworkAccessManagerFactory.cpp > > > > I'm using qt 4.7 and followed the documentation > > ( > http://doc.qt.nokia.com/4.7-snapshot/qdeclarativenetworkaccessmanagerfact > > ory.html) when writing the code. The method > > MyNetworkAccessManagerFactory::create(QObject* parent) does get called > > when the QML document is loaded using the QDeclarativeView, so the > > framework is definitely picking up the new proxy settings. > > > > The questions I have are: > > > > 1. Is the implementation of MyNetworkAccessManagerFactory::create > correct? > > I assumed because I was subclassing from a class with 'factory' in its > > name, that it was ok to return the same pointer to NetworkAccessManager. > > > 2. How do I know if the method that calls "create" takes ownership of the > > returned pointer or not? I assumed it didn't, hence cleaning up in > > ~MyNetworkAccessManagerFactory(); > > > > 3. Is there anything obviously wrong with the way I'm using the > > NetworkAccessManager? > > The factory must create a new NAM each time it is called. This is because > QML creates multiple threads and each must have its own NAM. It is > important > that you set the parent of the NAM created to the parent passed in the > create() method (which you already do). The NAM will be destroyed when its > parent is destroyed. I will update the documentation to make this clear. > > Also take special note of this line from the documentation: > > "Note: the create() method may be called by multiple threads, so ensure the > implementation of this method is reentrant." > > -- > Martin > -- Regards Jack
_______________________________________________ Qt-qml mailing list Qt-qml@trolltech.com http://lists.trolltech.com/mailman/listinfo/qt-qml