Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: sendevent от Ноябрь 30, 2009, 05:58



Название: QWeb[View|Page] - contents sharing without reloading
Отправлено: sendevent от Ноябрь 30, 2009, 05:58
Привет!
Нужна помощь по "взаимодействию" QWebView/QWebPage - никак не получается понять, хто кому родитель и кто за что отвечает.
Изначально задача - расшарить загруженный контент между двумя вьюхами (без перезагрузки).
Вроде, можно одной вью установить QWebPage другой, в который уже загружено содержимое.

%QTDIR%/examples/webkit/previewer/previewer.cpp:

Код:
void Previewer::on_previewButton_clicked()
{
    // Update the contents in web viewer
    QString text = plainTextEdit->toPlainText();
    webView->setHtml(text, baseUrl);

//-- added for test:
    QWidget *pTestWidget = new QWidget( 0 );
    pTestWidget->setAttribute( Qt::WA_DeleteOnClose );
    QWebView *pWebView = new QWebView( pTestWidget ); //-- will be deleted with pTestWidget
    pWebView->setPage( webView->page() );
//-- The parent QObject of the provided page remains the owner of the object.
//-- If the current document is a child of the web view, it will be deleted.
//-- (c) QAss
//-- As i've understood, now "original" QWebPage* of pWebView is deleted,
//-- but parent of webView->page() is not changed (perhaps, it's Previewer::webView)
    pTestWidget->show();
}
Но при таком подходе "первоначальная" вьюха становится "второстепенной" - т.е. активное юай-взаимодействие (со своевременной реакцей на событя ввода, изменение курсора над ссылками и т.п.) доступно тока для pWebView, но не для Previewer::webView (выглядит это все примерно так (http://www.youtube.com/watch?v=0-MFZzVW1yM) [00:00:40, 2Mb]).
В принципе, поведение вполне логично и мне подходит. Вопрос только вот:
Как при закрытии pTestWidget (читай - после удаления "второй" QWebView) вернуть "адекватность" Previewer::webView ("первоначальной")?



Название: Re: QWeb[View|Page] - contents sharing without reloading
Отправлено: Авварон от Декабрь 01, 2009, 08:07
разберись с парентами. Имхо должно работать, если обе веб пейдж будут без парента (тк в доке написано что QWebView::setPage не меняет парента - для чего-то это сделано...)