QT используя addToJavaScriptWindowObject () - PullRequest
       28

QT используя addToJavaScriptWindowObject ()

3 голосов
/ 15 сентября 2011

Я пытаюсь использовать void QWebFrame::addToJavaScriptWindowObject(const QString & name, QObject * object). Моя проблема, когда я пытаюсь вызвать функцию в JavaScript

TypeError: Результат выражения 'screen.valueChanged' [undefined] не является функцией.

TimeSliceScreen::TimeSliceScreen(QWidget* parent)
:
QWidget( parent )
{
   QVBoxLayout* layout = new QVBoxLayout( this );

   _timeSlice = new QWebView( this );
   _timeSlice->setMinimumSize( 200,200);
   QSizePolicy policy = _timeSlice->sizePolicy();
   policy.setVerticalStretch(3);
   _timeSlice->setSizePolicy(policy);
   _timeSlice->settings()->setAttribute( QWebSettings::JavascriptEnabled, true );
   _timeSlice->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled, true );
   layout->addWidget( _timeSlice );
   layout->addStretch();
   layout->addSpacing( 20 );
   _timeSlice->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);

   interface = new WebPageInterface();

   connect( _timeSlice->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), 
           this, SLOT(populateJavaScriptWindowObject()) );

}
void TimeSliceScreen::populateJavaScriptWindowObject(){
   _timeSlice->page()->mainFrame()->addToJavaScriptWindowObject(QString("screen"), 
                                                                 interface);
}

WebPageInterface - это очень простой класс, который расширяет QObject и имеет один слот с именем valueChanged, который является функцией, которую я пытаюсь вызвать.

Мой JavaScript:

function call() {
    screen.valueChanged();
}

который вызывается с

<input type="hidden" id="maxhid" name="maxhid" value="{maxSlider}" onchange="call()"/>

Все, что я прочитал, говорит, что это способ сделать это, но он не работает для меня.

1 Ответ

1 голос
/ 16 сентября 2011

Я думаю, что экран является зарезервированным именем в JS. Попробуйте изменить имя на другое. В противном случае похоже, что это должно работать.

...