• 10894阅读
  • 7回复

QNetworkAccessManager之前如何设置接入点和关联网络连接? [复制链接]

上一主题 下一主题
离线pipzeng
 
只看楼主 倒序阅读 楼主  发表于: 2010-11-04
— 本帖被 XChinux 执行加亮操作(2010-11-06) —
环境:winxp, QT Creator 2.0/Nokia Qt SDK 1.0 (针对S60 V5手机开发)

程序中采用QNetworkAccessManager处理请求,代码段如下:
...
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
manager->setProxy(QNetworkProxy::NoProxy);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
ui->lbl_msg->setText(codec->toUnicode("登录中,请稍候..."));
manager->get(QNetworkRequest(QUrl(url+"/LoginHandler.aspx?Action=login&LoginName="+loginname+"&Pwd="+pwd+""))); //发送请求

现象描述:
1)代码在模拟器上运行正常。
2)连接到真机(nokia 5235)上调试时,如果真机上设置了默认连接(在承载方式下设置,默认链接为为互联网(联通3gnet)),程序在执行manager->get...时,会导致真机自动重启。
2)若将真机上的默认连接方式设置为(询问一次),则在真机上调试是正常的,但每次网络连接之前都会出现接入点选择框,我选择互联网接入点,运行是正常的。

如何在程序中实现每次需要网络连接时自动寻找接入点(3gnet/3gwap),无需用户选择。在网上学习了一下关于接入点选择和屏蔽方面的资料。

在QNetworkAccessManager之前设置接入点和Connection.Start,代码如下:
...
User::LeaveIfError(iSocketServ.Connect());
  User::LeaveIfError(iConnection.Open(iSocketServ));
  TCommDbConnPref connectPref;  
  connectPref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
  connectPref.SetBearerSet(ECommDbBearerUnknown);
  connectPref.SetDirection( ECommDbConnectionDirectionOutgoing );  
  connectPref.SetIapId(iSelectedIap);
  User::LeaveIfError(iConnection.Start(connectPref)); 

RHTTPConnectionInfo connInfo = iSession.ConnectionInfo();
    RStringPool pool = iSession.StringPool();

    // Attach to socket server
    connInfo.SetPropertyL(pool.StringF(HTTP::EHttpSocketServ,
                RHTTPSession::GetTable()), THTTPHdrVal(iSocketServ.Handle()));
    // Attach to connection
    TInt connPtr = REINTERPRET_CAST(TInt, &iConnection);
    connInfo.SetPropertyL(pool.StringF(HTTP::EHttpSocketConnection,
                RHTTPSession::GetTable()), THTTPHdrVal(connPtr));

加了以上代码执行后没什么效果,现象还是一样,不知道什么原因,貌似上面的代码是和HTTP请求进行关联的。好像QNetworkAccessManager无法和Connection进行关联。不知使用QNetworkAccessManager时该如何打开和关联网络连接?

请高人赐教一下,感谢!

离线XChinux

只看该作者 1楼 发表于: 2010-11-04
关注楼主。。。还没搞过这块儿,同问。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线hqd_2008
只看该作者 2楼 发表于: 2010-11-05
在研究这个,同学并顶起该贴。
离线pipzeng
只看该作者 3楼 发表于: 2010-11-05
mobility的QNetworkSession和QNetworkConfigurationManager有高人用过吗?麻烦出来指点下!

我换了一种方式在试,还没解决,好像session 和QNetworkAccessManager还是没有关联上....

QNetworkSession* session;
    QNetworkConfigurationManager cfgmanager;
    const bool selectIap = (cfgmanager.capabilities()& QNetworkConfigurationManager::CanStartAndStopInterfaces);
    QNetworkConfiguration defaultIap = cfgmanager.defaultConfiguration();
    if(!defaultIap.isValid() && (!selectIap && defaultIap.state() != QNetworkConfiguration::Active))
    {
        QMessageBox::information(this, QString::fromLocal8Bit("提示信息"), QString::fromLocal8Bit("请设置有效的网络连接!"));
    }
    session = new QNetworkSession(defaultIap,this);
    session->open();

    manager = new QNetworkAccessManager(this);  //新建QNetworkAccessManager对象
  manager->setProxy(QNetworkProxy::NoProxy);

还没入门Symbian的开发,感觉做Symbian的程序员真惨,可查的资料不多,还是做微软的程序员幸福,可查的资料多,呵呵
离线XChinux

只看该作者 4楼 发表于: 2010-11-05
你的session是指网页中的session吗?这样的话,关键在于保存COOKIE吧。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线hqd_2008
只看该作者 5楼 发表于: 2010-11-05
Re:QNetworkAccessManager之前如何设置接入点和关联网络连接?(占下光)
各位大侠,

咨询下,我想QListWidget的滚动条会随着QListWidget Item的增加一直处于最底端,

之前有个帖子是讲QLineEdit的问题,我使用下面的方法

ListWidgetContent->verticalScrollBar()->setValue(ListWidgetContent->count());
发现滚动条总是会和底端差那么一点点,

请问需要做什么设置呢?
离线hqd_2008
只看该作者 6楼 发表于: 2010-11-05
回 5楼(hqd_2008) 的帖子
非常抱歉,公司的网络无法发帖,
却可以回帖。
离线pipzeng
只看该作者 7楼 发表于: 2010-11-06
引用第3楼pipzeng于2010-11-05 11:37发表的  :
mobility的QNetworkSession和QNetworkConfigurationManager有高人用过吗?麻烦出来指点下!
我换了一种方式在试,还没解决,好像session 和QNetworkAccessManager还是没有关联上....
QNetworkSession* session;
.......



已经解决了,用QNetworkSession Open成功就可以了。

之前由于升级了Nokia Qt SDK的原因(升级QT版本获取qnetworkconfigmanager的支持),没有同步执行Install QT to Symbian Device,Install QtMobility to
Symbian Device导致,今天重新install到手机上就可以了。程序运行正常了,可以自动获取互联网接入点和打开会话(NetworkSession),然后用QNetworkAccessManager也就正常了!


快速回复
限100 字节
 
上一个 下一个