Крах приложения при обращении к JavaScript из Flash



  • Всем привет.
    Написал простенький веб-браузер.
    При вызове из Flash Player-а JavaScript функции (к примеру вывод на печать фрейма)
    со второго-третьего раза приложение крешится с выводом сообщения
    отослать данные в MS.
    Запустил дебаггер, говорит - Получен сигнал: SIGSEGV (Segmentation fault)
    и в самом последнем стеке вызовов - Cannot access memory at address 0x0
    также где-то в середине списка вызовов - Cannot access memory at address 0xbaadf00d

    В обычных браузерах все отлично работает!

    Ось: Windows XP x32 Pro SP3.
    Qt: 4.8.4
    MinGW: 4.4
    Пишу в NetBeans 7.2.1.
    FlashPlayer: 11.5.502.110 (debug version)

    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&#40;&#41;;
    

    }
    @

    TestBrowser.h
    @
    #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
    @

    TestBrowser.cpp
    @
    #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();
    }
    @

    Большая просьба ткнуть пальцем что не так.
    Если есть любые мысли/идеи - буду рад узнать.



  • Короче проблема оказалась в самом QtWebKit
    Нормально компилится (работает) только из VS2010 + Qt 4.8.4
    С использованием MinGW - полный алес!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.