Как мне реализовать функцию scrollBy () в Qt QWebEngine? - PullRequest
0 голосов
/ 30 января 2019

Я хочу, чтобы полоса прокрутки QWebEngine прокручивалась вверх и вниз с помощью циферблата.Более старые версии Qt имели эту функцию с QWebView.scroll (int).Как мне реализовать эту функциональность в QWebEngine?

Я начал с использования шаблона simplebrowser, включенного в Qt 5.12.

Я уже пытался запустить

QWebEngineView()->page()->runJavaScript(QString("window.scrollTo(%1, %2);").arg(scrollX).arg(scrollY));

Found здесь .

Но это не сработало.Я также попытался установить фокус на веб-странице и заставить код имитировать нажатие клавиши вниз страницы.Это тоже не сработало.

Вот функция onDialChanged (int) WebView.Он вызывается при изменении набора в окне обозревателя.

int WebView::previousDial = 0;
int WebView::diff = 0;

void WebView::onDialChanged(int value) {
     int diff = value - this->previousDial;
     this->previousDial = value;
     std::cout << diff << std::endl;
     if(diff > 0) {
         this->setFocus();
         this->page()->runJavaScript(QString("window.scrollTo(%1, %2);").arg(0).arg(500), QWebEngineScript::ApplicationWorld);
     }
     else {
         this->setFocus();
         this->page()->runJavaScript(QString("window.scrollTo(%1, %2);").arg(0).arg(500), QWebEngineScript::ApplicationWorld);
         }
}

В настоящее время он только прокручивается на 500 для целей тестирования.Как только я заработаю, у меня будет расстояние прокрутки, основанное на значении.

Я ожидаю, что, когда изменится циферблат, страница прокрутится вниз на 500 пикселей.Когда я запускаю программу, она не прокручивается, и я получаю сообщение DuplicateHandle failed: Access is denied

Должен ли я использовать QWebChannel для этого?Или я вместо этого использую qt.window.scrollBy ()?

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

...