美好的一天,
我使用以下代码打开并显示html内容。
void MyClass::playHtml(QString filePath, int w, int h) {
QUrl url = QUrl::fromLocalFile(filePath);
mWidget = new QWebView(this);
mWidget->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
mWidget->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
mWidget->setGeometry(0, 0, width(), height());
float h_scale = (float) height() / h;
float w_scale = (float) width() / w;
float zoom = 1.0;
if (h_scale < w_scale) {
zoom = h_scale;
} else {
zoom = w_scale;
}
mWidget->setZoomFactor(zoom);
mWidget->load(url);
mWidget->show();
}
要复制到剪贴板,请将视图切换到纯文本模式
这是在MyClass中,它设置自己的几何,这个函数适当地缩放QWebView
以保持纵横比。删除MyClass对象时将调用mWidget(QWebView pointer)
的删除。以下是调用它的过程。
1。)MyClass被实例化为“mclass”。
2。)实例化后,上面的playHtml方法在mclass对象上调用
3.)上面的playHtml方法获取了一个驻留在一个独立文件夹中的html文件的完整路径,w / h是用于缩放的html内容的预定维度
4。)大约25秒后,mclass对象被删除
4a。)在这25秒内,playHtml方法适当地缩放html内容,并加载html文件。动画等很多javascript都会发生。
5.)删除后,发生MyClass的另一个实例化并重复该过程
这个过程可以在一天内一个接一个地重复3000次。在此期间,cpu和ram都不征税。我在上面的过程中唯一遗漏的是日志记录。我安装了一个MessageHandler来记录qDebug和其他消息。
以上是在上述过程运行一段时间后(在几个小时到几天内),我在日志中看到的内容。
每个“MyClass”实例中的一堆:
CRITICAL: QWindowsBackingStore::flush: GetDC failed ()
后面跟着一堆“MyClass”的实例:
CRITICAL: QWindowsBackingStore::flush: BitBlt failed ()
紧急事故发生后不久。
在事件查看器中,我收到崩溃“错误”消息。它总是在其中一个故障模块MSVCR100.dll或其中一个Qt5Webkit或Qt5WebkitWidget dll。
我不是特意画任何东西。我依靠QWebView来做到这一点 - 用于绘制自身及其包含的内容。除非上述情况开始发生,否则它会很好。除软件外,机器上没有其他任何东西在运行。
如何检测这样的错误?此时,在他们到达日志之前,我对他们一无所知。我想在那段时间之前检测并处理它们,但我不确定如何。作为旁注,我想借此机会了解有关Qt和C ++的错误检测的更多信息。首先,我如何检测这样的错误,这些错误似乎正在食物链中发生。我担心我被Java / C#提供的堆栈跟踪所破坏。
环境信息:
谢谢!
-Jason