特定网站在 QWebView 中抛出异常

Posted

技术标签:

【中文标题】特定网站在 QWebView 中抛出异常【英文标题】:Specific websites throwing an exception in QWebView 【发布时间】:2016-01-26 16:39:20 【问题描述】:

在运行我的代码时,我在尝试使用 QWebView 时遇到写访问冲突异常:

重现错误的最小可编译代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtWebKitWidgets/QWebView>
#include <QUrl>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);
    QWebView *wv = new QWebView(this);
    wv->load(QUrl("http://steamcommunity.com/"));
    setCentralWidget(wv);



MainWindow::~MainWindow()

    delete ui;

pro文件还包括webkitwidgetsnetwork

QT       += core gui webkitwidgets network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp\
        mainwindow.cpp
HEADERS  += mainwindow.h
FORMS    += mainwindow.ui

错误提示

我得到的错误如下所示:

ASSERTION FAILED: leftSide->category() != CalcOther && rightSide->category() != CalcOther
css\CSSCalculationValue.cpp(290) : WebCore::CSSCalcBinaryOperation::create
1   0354A5B7
2   02E58E41
3   02E59520
 ...

我无法提供堆栈跟踪,因为错误在一个 Qt 文件中,但这里是反汇编:

该错误仅发生在特定网页(例如 steamcommunity.com)上,而不会发生在其他网页上。是否有可能某些网站只是破坏了 Qt 的 API?

编译器:MSVC2013 x86 Qt 版本:Qt 5.5.0

【问题讨论】:

这是一个 Qt 错误。您必须构建一个调试 Qt 以获得合理的回溯,然后报告它。 如何报告错误?他们会尽快修复它还是我应该使用旧版本的 Qt? 付费支持有其好处 :) 在bugreports.qt.io 报告错误 请注意,您应该使用最新的 5.5.1,而不是 5.5.0。 Qt WebKit 是一个已弃用的模块,您应该改用 WebEngine。 @MrEricSir 谢谢,我会看看。 【参考方案1】:

原来这个错误实际上是一个Qt错误。 它的状态可以在这里查看:Qt Bug Report

使用新的Qt WebEngine Widgets 模块可以很好地替代我。

【讨论】:

对于 Qt 开发团队来说,这是一种耻辱,即使在 Qt 5.5.1 中,Web Kit 也是如此错误。他们只是忽略了这个渲染器:(。你使用哪个版本的 Qt Web 引擎?我必须支持 Windows XP,但是 Qt 5.5.1 是 Web Engine 可以在 Windows XP 中工作的最后一个版本。 @ilya 我当时使用的 Qt 版本是 Qt 5.5.0。

以上是关于特定网站在 QWebView 中抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 的方法中抛出特定的异常是多余的吗?

如何在 Symfony2 中抛出 403 异常?

使用 Mockito 从模拟中抛出已检查的异常

C#如何在中间层类中抛出异常时获得控制焦点

在 finally 块中抛出异常

在Scala中抛出异常,啥是“官方规则”