Белый экран при запуске приложения QGraphicsView

Наше приложение использует Graphics View фреймворк Qt для загрузки html страниц. QGraphicsWebView загружает локальную html страницу с черным фоном. Но всегда наблюдал белый экран при запуске приложения. Я попытался установить черный фон для QGraphicsView и QGraphicsScene. У меня ничего не получалось.

Вот пример кода для справки. MainWindow унаследованный от класса QMainWindow

mGraphicsScene = new QGraphicsScene(this);

mGraphicsView = new QGraphicsView(mGraphicsScene);    
mGraphicsView->setViewport(new QGLWidget(this));

mGraphicsWebView = new QGraphicsWebView;
mGraphicsWebView->setUrl(QUrl("https://www.google.co.in/"));


mGraphicsScene->addItem(mGraphicsWebView);
setCentralWidget(mGraphicsView);

Есть ли способ избежать белого экрана приложения?

С уважением, Пратап.


person Pratap    schedule 09.10.2014    source источник


Ответы (2)


Попробуйте дальше. Почему ты увидел белый? Поскольку элемент уже добавлен, но страница не загружена, поэтому вы видите белый (пустой) элемент без страницы. Установите на вашу сцену какую-нибудь черную растровую карту, подключите сигнал loadFinished к специальному слоту, куда вы добавляете предмет на свою сцену. В этом случае сцена будет черной, но когда страница будет загружена, ваш слот добавит это на scnen и вы увидите только страницу.

mGraphicsScene = new QGraphicsScene(this);
mGraphicsScene->addItem(new QGraphicsPixmapItem(QPixmap("G:/2/qt.jpg")));

mGraphicsView = new QGraphicsView(mGraphicsScene);
mGraphicsView->setViewport(new QGLWidget(this));

mGraphicsWebView = new QGraphicsWebView;
mGraphicsWebView->setUrl(QUrl("https://www.google.co.in/"));

connect(mGraphicsWebView,SIGNAL(loadFinished(bool)),this,SLOT(slotLoaded()));
//mGraphicsScene->addItem(mGraphicsWebView);
mGraphicsView->resize(1000,700);
mGraphicsView->show();

Слот:

void MainWindow::slotLoaded()
{
    mGraphicsScene->addItem(mGraphicsWebView);
}

Например, черная растровая карта, созданная кодом:

QPixmap black(1000,700);
black.fill(Qt::black);

mGraphicsScene = new QGraphicsScene(this);
mGraphicsScene->addItem(new QGraphicsPixmapItem(black));

При запуске приложения:

введите здесь описание изображения

Как видите, при загрузке страницы все черное:

введите здесь описание изображения

Как видите, это обычная страница. Это не очень красиво, потому что я использую быстрые настройки и изменение размера окна и т. Д., Но вы установите графический вид в качестве центрального виджета, сделайте так, чтобы это было красивее.

person Kosovan    schedule 09.10.2014

Большое спасибо за ответ.

Я попробовал ваше решение и также наблюдал белый экран при запуске приложения в Windows. Я обнаружил, что виновником является mGraphicsWebView->setUrl(QUrl("https://www.google.co).in/")); Это блокирует все другие виджеты на сцене. Поэтому я добавил таймер singleShot и оставил это утверждение под ним. //QTimer::singleShot(100, this, SLOT(loadUrl())); Тогда он работает нормально.

Пожалуйста, дайте мне знать, если у вас есть идея получше.

person Pratap    schedule 10.10.2014
comment
Пишите такие вещи в комментариях, я не получил уведомления о вашем ответе, хорошо, что я заглянул в этот вопрос и увидел, что вы написали. Я не знаю, зачем setUrl это делает, у меня на компе все нормально работает. Но если в вашем случае вы используете эту конкретную вещь, значит, у вас нет другого решения. В любом случае, одиночный выстрел не является чем-то очень плохим. Но, конечно, вам следует избегать этого, когда вы можете это сделать. - person Kosovan; 10.10.2014