を使おうとしていますvoid QWebFrame::addToJavaScriptWindowObject(const QString & name, QObject * object)
。私の問題は、JavaScriptで関数を呼び出そうとするときです
TypeError: 式 'screen.valueChanged' [未定義] の結果は関数ではありません。
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
され、呼び出されたスロットが 1 つありvalueChanged
ます。これは、呼び出そうとする関数です。
私のJavaScriptは:
function call() {
screen.valueChanged();
}
から呼び出されます
<input type="hidden" id="maxhid" name="maxhid" value="{maxSlider}" onchange="call()"/>
私が読んだすべてのことは、これがそれを行う方法であると言っていますが、それは私にとってはうまくいきません.