我正在尝试使用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()"/>
我读到的所有内容都表明这是做到这一点的方式,但它并不适用于我。
答案 0 :(得分:1)
我认为屏幕是js中的保留名称。尝试将名称更改为其他名称。否则看起来应该有效。