在多个窗口中使用全局QNetworkCookieJar时,应用程序崩溃
Application crashes when using global QNetworkCookieJar for multiple windows
我是Qt的新手,正在使用Qt5.5创建一个http客户端应用程序,该应用程序将加载一个具有固定URL的窗口。在该窗口登录后,同一站点的其他窗口应该会获得相同的会话。为此,我使用了QNetworkCookieJar
类的全局指针jar
,并在以下代码中为每个窗口实现
Window1::Window1(QWidget *parent) :
QWidget(parent),
ui(new Ui::Window1)
{
ui->setupUi(this);
QUrl webURL("http://someURL");
ui->webView->show();
ui->webView->load(webURL);
ui->webView->page()->networkAccessManager()->setCookieJar(jar);
}
它解决了多重身份验证问题,但当我关闭任何窗口并立即重新打开时,都会导致appcrash。
请就我的问题给我一个建议。提前谢谢。
来自Qt5文档(http://doc.qt.io/qt-5/qnetworkaccessmanager.html#setCookieJar):
注意:QNetworkAccessManager拥有cookieJar对象的所有权
因此,accessmanager将删除您的jar
实例。可能是你的问题!我对webview/page/accessmanager的了解还不够,无法确定管理器的生存期,但它似乎与webview/你的ui绑定在一起,所以当它被关闭+销毁时,你的cookiejar也会消失。
由于QNetworkCookieJar
继承自QObject,您可能希望使用受保护的QPointer<QNetworkCookieJar> jar
而不是简单的QNetworkCookieJar* jar
变量。然后,您会注意到,在第一个窗口关闭/销毁后,您的保护指针变为空。这将a)验证我在最后一段中的声明,b)防止您在未来访问过时的指针(事实上,您的程序将不再崩溃)。
感谢ThorngardSO。。我用你的答案找到了解决办法。这是我的解决方案,
if(jar.isNull()==true){
qDebug()<<"object null";
QPointer <QNetworkCookieJar> jar_new = new QNetworkCookieJar(0);
ui->webView->page()->networkAccessManager()->setCookieJar(jar_new);
jar=jar_new;
}
else
ui->webView->page()->networkAccessManager()->setCookieJar(jar);
相关文章:
- 没有找到相关文章