Добрый день всем,
Я использую следующий код для открытия и отображения содержимого 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
соответственно, чтобы сохранить соотношение сторон. Удаление для mWidget(QWebView pointer)
вызывается при удалении объекта MyClass. Вот процесс, как это называется.
1.) MyClass создается как «mclass».
2.) после создания описанного выше метода playHtml вызывается для объекта mclass
3.) метод playHtml, приведенный выше, берет полный путь к html-файлу, который находится в отдельной папке, w / h — предопределенные размеры html-содержимого, используемые при масштабировании
4.) примерно через 25 секунд объект mclass удаляется
4a.) В течение этих 25 секунд метод playHtml соответствующим образом масштабирует содержимое html и загружает файл html. Много JavaScript происходит для анимации и т. Д.
5.) после удаления происходит другое создание экземпляра MyClass и процесс повторяется
этот процесс может повторяться буквально 3000 раз в день, один за другим. В течение этого времени ни процессор, ни оперативная память не облагаются налогом. Единственное, что я оставил вне процесса, это регистрация. Я установил MessageHandler для регистрации qDebug и других сообщений.
Вот что я вижу в журналах после того, как вышеописанный процесс выполняется какое-то время (от нескольких часов до нескольких дней).
Куча таких на каждый экземпляр «MyClass»:
CRITICAL: QWindowsBackingStore::flush: GetDC failed ()
сопровождаемый связкой этих за экземпляр «MyClass»:
CRITICAL: QWindowsBackingStore::flush: BitBlt failed ()
Вскоре последовал сбой.
В программе просмотра событий я получаю сообщение об ошибке «Ошибка». Он всегда находится в одном из этих неисправных модулей MSVCR100.dll или в одной из библиотек Qt5Webkit или Qt5WebkitWidget.
Я специально ничего не рисую. Я полагаюсь на QWebView, чтобы сделать это — и для рисования самого и содержания, которое это содержит. Это хорошо, за исключением случаев, когда вышеупомянутое начинает происходить. На машине больше ничего не работает, кроме программного обеспечения.
Как можно было бы обнаружить такие ошибки? На данный момент я ничего о них не знаю, пока они не попадут в журнал. Я хотел бы обнаружить и справиться с ними до этого времени, но не уверен, как. Как примечание, я хотел бы воспользоваться этой возможностью, чтобы узнать больше об обнаружении ошибок в целом для Qt и C ++. Прежде всего, как я могу обнаружить подобные ошибки, которые, кажется, происходят дальше по пищевой цепи. Боюсь, что я был испорчен следами стека, предоставленными Java / C #.
Информация об окружающей среде:
Спасибо!
-Джейсон
Задача ещё не решена.