![]() |
|
||||||||||
|
|||||
|
[+5 18.06.13]
[+1 20.07.13] Регистрация: Apr 2012
Адрес: ifinterface.com
Сообщений: 158
|
Всем привет.
Очень надеюсь, что кто-нибудь что-то подскажет (а вдруг). Задавал этот вопрос на форуме по Qt - не повезло... И так. Написал свой браузер на Qt для своего же приложения с использованием Flash player-а. Так вот при вызове JavaScript функции (ExternalInterface.call) из базового (первым загружен) ролика - все в порядке, а вот если вызывать (к примеру вывод на печать html страницы) из вложенного ролика (подгруженного в основной) приложение валится с предложением отправить данные в MS. Если кто-нибудь что-то по теме знает большая просьба поделиться. Добавлено через 25 минут Небольшое дополнение: после нескольких удачных попыток из базового ролика тоже валится.
__________________
Небольшая часть реализации моего внутреннего мира |
|
|||||
|
listener
|
Сложно указать причину, не рассмотрев код приложения. В таком "компоте", как Qt+WebKit+MS можно огрести и не такое.
Я бы проверил версии модулей Qt, FlashPlayer и т.д., опции компиляции на предмет: "а не используем ли мы что-то 32-битное в 64-битном окружении, или наоборот". |
|
|||||
|
[+5 18.06.13]
[+1 20.07.13] Регистрация: Apr 2012
Адрес: ifinterface.com
Сообщений: 158
|
Ось: Windows XP x32 Pro SP3.
Qt: 4.8.4 MinGW: 4.4 Пишу в NetBeans 7.2.1. FlashPlayer: 11.5.502.110 (debug version) Попробовал - скомпилировал из под VS 2010 (уже под Win7 x32) - походил по yandex-у, тоже падает в какой-то момент с bbadbeef. Проблема - не может обратить по адресу в памяти, но вот почему... Самый-то прикол в том что есть такой браузер QupZilla тоже на Qt. В нем не падает - все гуд. Исходники его открыты, но я не могу разобраться что они там такого делают что не падает (слаб еще в C++ видимо). Попозже соберу упрощенный вариант с данной проблемой - покажу исходники. Закину на свой сайт странички для теста - может тогда кто-то поможет разобраться. Но если есть какие мысли, не дожидайтесь - пишите. Добавлено через 14 часов 11 минут Со второго, третьего раза вывода на печать падает приложение. main.cpp #include <QApplication>
#include <QLocale>
#include <QTextCodec>
#include <QWebSettings>
#include "TestBrowser.h"
int main(int argc,char *argv[]){
QApplication a(argc,argv);
QWebSettings *ws=QWebSettings::globalSettings();
ws->setAttribute(QWebSettings::PluginsEnabled,true);
ws->setAttribute(QWebSettings::JavascriptEnabled,true);
ws->setAttribute(QWebSettings::JavaEnabled,true);
ws->setAttribute(QWebSettings::JavascriptCanOpenWindows,true);
ws->setAttribute(QWebSettings::JavascriptCanCloseWindows,true);
ws->setAttribute(QWebSettings::JavascriptCanAccessClipboard,true);
ws->setAttribute(QWebSettings::SpatialNavigationEnabled,true);
ws->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled,true);
ws->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled,true);
ws->setAttribute(QWebSettings::LocalStorageEnabled,true);
ws->setAttribute(QWebSettings::PrintElementBackgrounds,false);
ws->setAttribute(QWebSettings::DeveloperExtrasEnabled,true);
QLocale::setDefault(QLocale(QLocale::Russian,QLocale::RussianFederation));
QTextCodec *utfcodec=QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(utfcodec);
QTextCodec::setCodecForCStrings(utfcodec);
TestBrowser *mw = new TestBrowser();
mw->setWindowIcon(QIcon("favicon.ico"));
mw->resize(1060,800);
mw->move(40,0);
mw->show();
return a.exec();
}
#include "TestBrowser.h"
TestBrowser::TestBrowser(){
tp="http://ifinterface.com/techtest/testprint.html";
view=new QWebView(this);
view->page()->setForwardUnsupportedContent(true);
view->page()->createStandardContextMenu();
locationEdit=new QLineEdit(this);
locationEdit->setSizePolicy(QSizePolicy::Expanding,locationEdit->sizePolicy().verticalPolicy());
QToolBar *toolBar=addToolBar("Navigation");
toolBar->addAction(view->pageAction(QWebPage::Back));
toolBar->addAction(view->pageAction(QWebPage::Forward));
toolBar->addAction(view->pageAction(QWebPage::Reload));
toolBar->addAction(view->pageAction(QWebPage::Stop));
QPushButton *b1=new QPushButton("to TestPage",this);
toolBar->addWidget(b1);
toolBar->addWidget(locationEdit);
QPushButton *b2=new QPushButton("=>",this);
toolBar->addWidget(b2);
connect(view->page(),SIGNAL(printRequested(QWebFrame *)),this,SLOT(doPrint(QWebFrame *)));
connect(b1,SIGNAL(clicked()),this,SLOT(toTestPage()));
connect(b2,SIGNAL(clicked()),SLOT(changeLocation()));
connect(locationEdit,SIGNAL(returnPressed()),SLOT(changeLocation()));
locationEdit->setText(tp);
view->load(QUrl(tp));
setCentralWidget(view);
}
void TestBrowser::doAlertPan(QString me){
QMessageBox msgBox;
msgBox.setWindowIcon(QIcon("favicon.ico"));
msgBox.setIcon(QMessageBox::Information);
msgBox.setWindowTitle(tr("WebPage :: Сообщение"));
msgBox.setText(me);
msgBox.exec();
}
void TestBrowser::toTestPage(){
locationEdit->setText(tp);
view->load(QUrl(tp));
view->setFocus();
}
void TestBrowser::doPrint(QWebFrame * fr){
QPrintPreviewDialog* dialog=new QPrintPreviewDialog(this);
dialog->resize(800, 750);
connect(dialog,SIGNAL(paintRequested(QPrinter*)),fr,SLOT(print(QPrinter*)));
dialog->exec();
dialog->deleteLater();
}
void TestBrowser::changeLocation(){
QUrl url=QUrl(locationEdit->text());
view->load(url);
view->setFocus();
}
#ifndef TESTBROWSER_H
#define TESTBROWSER_H
#include <QApplication>
#include <QMainWindow>
#include <QObject>
#include <QLineEdit>
#include <QToolBar>
#include <QPushButton>
#include <QMessageBox>
#include <QPrintPreviewDialog>
#include <QPrinter>
#include <QWebView>
#include <QWebFrame>
#include <QUrl>
class TestBrowser : public QMainWindow{
Q_OBJECT
public:
TestBrowser();
QString tp;
QWebView *view;
QLineEdit *locationEdit;
void doAlertPan(QString me);
public slots:
void changeLocation();
void toTestPage();
void doPrint(QWebFrame * fr);
};
#endif
package{ import flash.net.URLRequest; import MakeButton; import flash.display.Sprite; import flash.display.SimpleButton; import flash.display.Loader; import flash.events.Event; import flash.events.MouseEvent; import flash.events.IOErrorEvent; import flash.external.ExternalInterface; import flash.net.URLRequest; public class TestPrint extends Sprite{ public var b1:SimpleButton; public var b2:SimpleButton; public var b3:SimpleButton; public var ob_sys:Object=new Object; public var ldr:Loader=new Loader(); public var pocket:Sprite; public function TestPrint():void{ if (stage){ init(); }else{ addEventListener(Event.ADDED_TO_STAGE,init); } } private function init(e:Event=null):void{ removeEventListener(Event.ADDED_TO_STAGE,init); ob_sys.OSID=2; b1=MakeButton.Made(this,1,"Base clip: Print 7"); b1.x=10; b1.y=10; addChild(b1); b1.addEventListener(MouseEvent.CLICK,onClick1); b2=MakeButton.Made(this,1,"Base clip: Print 12"); b2.x=10; b2.y=33; addChild(b2); b2.addEventListener(MouseEvent.CLICK,onClick2); genStart(); } public function onClick1(e:MouseEvent):void{ ExternalInterface.call("top.mpath.doPrint",7); } public function onClick2(e:MouseEvent):void{ ExternalInterface.call("top.mpath.doPrint",12); } private function genStart():void{ pocket=new Sprite; pocket.y=60; addChild(pocket); //ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadErr); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,onLdrComplete); var req:URLRequest=new URLRequest("http://ifinterface.com/techtest/testprintsubclip.swf"); ldr.load(req); } private function onLdrComplete(e:Event):void{ var co:*=ldr.content; co.mroot=this; co.y=65; pocket.addChild(co); } } } package{ import MakeButton; import flash.display.Sprite; import flash.display.SimpleButton; import flash.events.MouseEvent; public class TestPrintSubclip extends Sprite{ public var b1:SimpleButton; public var b2:SimpleButton; public var ob_sys:Object=new Object; public var mroot:Object; public function TestPrintSubclip():void{ ob_sys.OSID=2; b1=MakeButton.Made(this,1,"Subclip: Print 7"); b1.x=10; b1.y=10; addChild(b1); b1.addEventListener(MouseEvent.CLICK,onClick1); b2=MakeButton.Made(this,1,"Subclip: Print 12"); b2.x=10; b2.y=33; addChild(b2); b2.addEventListener(MouseEvent.CLICK,onClick2); } private function onClick1(e:MouseEvent):void{ mroot.onClick1(e); } private function onClick2(e:MouseEvent):void{ mroot.onClick2(e); } } } Большая просьба ткнуть носом где ступил.
__________________
Небольшая часть реализации моего внутреннего мира |
|
|||||
|
[+5 18.06.13]
[+1 20.07.13] Регистрация: Apr 2012
Адрес: ifinterface.com
Сообщений: 158
|
Короче сам добыл информацию путем экспериментов.
К сожалению QtWebKit плохо оттестирован для компиляции MinGW. Оптимальным вариантом оказалась только версия Qt4.8 (Qt4.7-не проверял, Qt5.0-тоже проблемы) при компиляции в VS2010 SP1 - все другие варианты fail. Для теста можете использовать страничку Приложение крешится обычно на 3-6 вывод на печать. Всем успешных трудов.
__________________
Небольшая часть реализации моего внутреннего мира |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|