Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: Ubuntu_linux от Июль 07, 2012, 14:13



Название: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 07, 2012, 14:13
Есть одна страничка на которой  загружается большой xml файл (1-7МБ) и отображаю на страничке некоторую инфу, Но мне надо открить новую страничку на которой будет более детальная инфа с хмл. Так как мне передать хмл обєкт на другую страничку?


Название: Re: Как передать обект между двума страничками?
Отправлено: invasion от Июль 13, 2012, 15:32
я бы попробовал static или файл как временный буфер, в зависимости от вашей реализации...


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 13, 2012, 18:27
Ну реализация очень простая, вебкит отображает страничку в которой с помочу js  читаю хмл и частично отображаю нужную инфу на страничке, но потом кликаю по силке  и открываю новую страничку, где отображаю более детальную информацию с хмл. Сейчас я два раза открываю хмл, а как сделать что бы один?


Название: Re: Как передать обект между двума страничками?
Отправлено: fuCtor от Июль 13, 2012, 20:17
Если читаете XML из сети, делаете частичное отображение, нужно ли вообще использовать Webkit? Может может реализовать на виджетах? Либо там сложное динамическое взаимодействие реализовано?


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 13, 2012, 21:07
Если читаете XML из сети, делаете частичное отображение, нужно ли вообще использовать Webkit? Может может реализовать на виджетах? Либо там сложное динамическое взаимодействие реализовано?
хмл читается с диска (локально). Вебкит просто браузер, а основная логика на яваскрипт! хмл парсится в страничку.
Что значит "частичное отображение" ?


Название: Re: Как передать обект между двума страничками?
Отправлено: fuCtor от Июль 14, 2012, 05:25
Ну реализация очень простая, вебкит отображает страничку в которой с помочу js  читаю хмл и частично отображаю нужную инфу на страничке, но потом кликаю по силке  и открываю новую страничку, где отображаю более детальную информацию с хмл. Сейчас я два раза открываю хмл, а как сделать что бы один?
Если перенести логику на Qt, то тогда можно сделать что-бы файл не перезагружался, а сразу переходить к нужным фрагментам и визуализировать их.


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 14, 2012, 10:38
К сожелению так сделать нельзя, поетому исчу решения на js.


Название: Re: Как передать обект между двума страничками?
Отправлено: alexis031182 от Июль 14, 2012, 11:29
Решение возможно только для относительно небольшого куска данных. Если конечно не использовать посредника в виде http-сервера или локального файла на диске.

Первый вариант заключается во внедрении в ссылку (в тег "а") тела xml-документа. Очевидно, что это не самый лучший выход, да и серьёзно ограничен объёмом передаваемых данных.

Второй вариант предполагает "ручное" конструирование целевой страницы на javascript. Тогда xml-объект можно будет передать. Но далеко не всегда этот вариант подходит: "ручную" страницу нужно создавать с нуля. В случае, если последняя имеет довольно сложную структуру, это действо будет весьма не простое.

Другие варианты лично мне неизвестны.


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 14, 2012, 12:37
хмл имеет размер более 1-7 Мб!
Поясните, пожалуйста, второй вариант?


Название: Re: Как передать обект между двума страничками?
Отправлено: alexis031182 от Июль 14, 2012, 13:07
Второй вариант заключается в создании окна/вкладки:
Код
Javascript
<form>
<input type="button" value="New Window!" onClick="window.open('index.htm', 'mywindow', 'width=400, height=200')">
</form>
 
Эту страницу придётся полностью реализовывать на js.


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 14, 2012, 13:54
Я и так создаю страничку через JS.

Ок, и как передать объект в созданную страничку?


Название: Re: Как передать обект между двума страничками?
Отправлено: alexis031182 от Июль 14, 2012, 20:11
window.opener (http://javascript.ru/window.opener) должен помочь.


Название: Re: Как передать обект между двума страничками?
Отправлено: fuCtor от Июль 15, 2012, 10:22
Еще один вариант в голову пришел, все так же переложить часть логики на C++, но только той что занимается выделением нужной части XML файла. Сделать класс который будет выдавать по запросу нужные грагменты XML, прокинуть его в обе страницу и обращаться из JS.


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 15, 2012, 10:33
Но тут опять вопрос, как прокинуть обэкт  с++ --> JS ?


Название: Re: Как передать обект между двума страничками?
Отправлено: Bepec от Июль 15, 2012, 11:30
http://www.prog.org.ru/topic_20820_0.html

Тоже интересная, но довольно лёгкая темка :)


Название: Re: Как передать обект между двума страничками?
Отправлено: fuCtor от Июль 15, 2012, 11:33
Но тут опять вопрос, как прокинуть обэкт  с++ --> JS ?

http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#addToJavaScriptWindowObject


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 16, 2012, 08:29
window.opener (http://javascript.ru/window.opener) должен помочь.
Да, класс, то что нужно, но возникла проблемка, надо организовать многострвничность в браузере! Где копать?


Название: Re: Как передать обект между двума страничками?
Отправлено: alexis031182 от Июль 16, 2012, 10:44
Да, класс, то что нужно, но возникла проблемка, надо организовать многострвничность в браузере! Где копать?
Свой браузер делаете?

Я так понимаю, что многостраничность - это несколько табов на форме. В этом случае нужно создать по одному экземпляру класса браузера на таб. Наверное так.


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 16, 2012, 11:08
Да, класс, то что нужно, но возникла проблемка, надо организовать многострвничность в браузере! Где копать?
Свой браузер делаете?

Я так понимаю, что многостраничность - это несколько табов на форме. В этом случае нужно создать по одному экземпляру класса браузера на таб. Наверное так.

Неа, не браузер, просто оболочку для обработки js и отображения результата.

Вот походу надо переопределить  метод createWindow,  а результатом будет новое окно QWebView.

Код
C++ (Qt)
class MyWebView :public QWebView
{
   Q_OBJECT
public:
   explicit MyWebView(QWebView *p=0){}
private:
   QWebView* createWindow(QWebPage::WebWindowType type){return new QWebView();}
};

Теперь надо подумать как организовать отображения многостраничности. и засунуть все это в qml.


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 16, 2012, 11:11
Но тут опять вопрос, как прокинуть обэкт  с++ --> JS ?

http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#addToJavaScriptWindowObject

Да, здорово, проверил, работает!
Но для меня важно передавать уже разпарсеный хмл, так как это самый долгий процесс у меня! Но вопрос, как передать хмл объект в страничку?


Название: Re: Как передать обект между двума страничками?
Отправлено: fuCtor от Июль 16, 2012, 11:48
Но тут опять вопрос, как прокинуть обэкт  с++ --> JS ?

http://doc.qt.nokia.com/4.7-snapshot/qwebframe.html#addToJavaScriptWindowObject

Да, здорово, проверил, работает!
Но для меня важно передавать уже разпарсеный хмл, так как это самый долгий процесс у меня! Но вопрос, как передать хмл объект в страничку?

Никак, как вариант можно парсить на стороне C++, а в браузер вкидывать готовые фрагменты разметки. Разбор/парсинг/формирование ответа можно выводить в поток, а по окончанию кидать результат сигналом, к которому сделать биндинг в JS коде на странице + к этому jQuery (например) и вполне можно таким хитрым способом формировать вывод.


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 16, 2012, 12:58
А если сделать болванку на QWebPage  с нужными скриптами и засунуть ее в отдельный поток?


Название: Re: Как передать обект между двума страничками?
Отправлено: mutineer от Июль 16, 2012, 13:10
Виджеты могут работать только в GUI-потоке


Название: Re: Как передать обект между двума страничками?
Отправлено: Ubuntu_linux от Июль 16, 2012, 13:45
Виджеты могут работать только в GUI-потоке
Это да!
Я виду к тому, что может страница унаследована не от виджета, а от обьэкта, например.


Название: Re: Как передать обект между двума страничками?
Отправлено: mutineer от Июль 16, 2012, 13:57
ну так загляни в документацию