2011-09-15 44 views
3

我想使用void QWebFrame::addToJavaScriptWindowObject(const QString & name, QObject * object)。我的问题是,当我尝试调用该函数在JavaScriptQT使用addToJavaScriptWindowObject()

TypeError: Result of expression 'screen.valueChanged' [undefined] is not a function.

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

我认为屏幕是js中的保留名称。尝试将名称更改为其他名称。否则看起来应该工作。