Мы разрабатываем приложение с пользовательским интерфейсом Qt, содержащим QWebEngineView
. В настоящее время тестирую на macOS (10.12..10.14) с Qt 5.9.6
Из-за особенностей ОС приложение иногда ожидает ввода данных пользователем (например, пароль системного администратора), прежде чем набрать QApplication::exec()
.
Мы поняли, что, если это ожидание занимает слишком много времени, вызовы QWebEngineView::load(QUrl)
молча завершаются сбоем, показывая серое представление вместо ожидаемого визуализированного html.
Мы создали минимальный пример, вызывающий проблему в наших тестовых средах:
#include <QApplication>
#include <QMainWindow>
#include <QWebEngineView>
#include <QWidget>
#include <chrono>
#include <iostream>
#include <thread>
int main(int argc, char *argv[])
{
QApplication qtapp(argc, argv);
QMainWindow *window = new QMainWindow;
window->setFixedSize({800, 600});
QWebEngineView *webview = new QWebEngineView();
window->setCentralWidget(webview);
window->show();
std::this_thread::sleep_for(std::chrono::seconds(30));
std::clog << "Done sleeping" << std::endl;
webview->load({"https://www.google.com"});
return qtapp.exec();
}
Комментируя sleep
, Google home выглядит просто отлично. С sleep
мы получаем вместо этого серую область.
- Есть ли ошибка в использовании Qt в этом примере?
- Или это ошибка в фреймворке?
Edit:
Дальнейшие исследования показывают, что проблема не возникает, пока sleep
предшествует как webview->load()
, так и window->show()
.