QWebView에서 QWebEngineView로
8508 단어 qt
vs2013 업데이트 5로 업데이트하거나 텍스트 편집기에서 프로젝트 삽입을 엽니다: IgnoreWarn Compile Duplicated Filename...true...
방법1:html에 가입https://getfirebug.com/firebug-lite.js, 페이지에서 F12를 누르면 디버깅 패널을 열 수 있습니다. 단점: 이 js 파일은 비교적 커서 불러올 때 효율에 영향을 줍니다.기능이 제한되어 있다.방법2: 프로그램을 시작할 때 qputenv("QTWEBENGINE REMOTE DEBUGGGING", 9000)를 열고 크롬에서 웹 주소를 열면localhost:9000에서 QWebEngineView가 불러온 html을 볼 수 있습니다. 해당하는 html을 클릭하면 크롬의 개발자 도구를 열 수 있습니다.이 방법은 위의 것보다 훨씬 좋다.
bool WebPage::acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame)
{
if (isMainFrame) {
if (NavigationTypeLinkClicked == type) {
emit sigLoadUrl(url);
return false;
}
}
return true;
}
QPair<bool, QVariant> syncRunJavaScript(QWebEnginePage *page, const QString &javascript, int msec)
{
QPair<bool, QVariant> result = qMakePair(false, 0);
QSharedPointer loop = QSharedPointer(new QEventLoop());
QTimer::singleShot(msec, loop.data(), &QEventLoop::quit);
page->runJavaScript(javascript, [loop, &result](const QVariant &val) {
if (loop->isRunning()) {
result.first = true;
result.second = val;
loop->quit();
}
});
loop->exec();
return result;
}
QWebEngineView 리셋 함수 contextMenuEvent에서 호출할 수 없습니다!runJavaScript 콜백에서 장시간 작업을 수행할 수 없습니다. 그렇지 않으면 JavaScript 코드가 다음과 같이 실행되지 않습니다.
page()->runJavaScript("script", [](const QVariant &val) {
// ...
menu.exec(QCursor::pos());
}
해결 방법은 신호와 슬롯 함수를 정의하고QueuedConnection방식connect를 사용하여 slotJavaScriptResult에서 시간 소모 작업을 처리합니다.
connect(this, &webview::sigJavaScriptResult, this, &webview::slotJavaScriptResult, Qt::QueuedConnection);
void sigJavaScriptResult(const QString &command, const QVariantMap &result);
void slotJavaScriptResult(const QString &command, const QVariantMap &result);
connect(this->page(), SIGNAL(loadFinished(bool)), this, SLOT(finish(bool)));
window.cppobj = null;
new QWebChannel(qt.webChannelTransport, function(channel) {
window.cppobj = channel.objects.cppobj;
cppobj.init(); // C++
});
function contextMenu(e) {
var targ;
if (!e) {
var e = window.event;
}
if (e.target) {
targ = e.target;
} else if (e.srcElement) {
targ = e.srcElement;
}
}
function getHTMLOfSelection () {
var range;
if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
return range.htmlText;
}
else if (window.getSelection) {
var selection = window.getSelection();
if (selection.rangeCount > 0) {
range = selection.getRangeAt(0);
var clonedSelection = range.cloneContents();
var div = document.createElement('div');
div.appendChild(clonedSelection);
return div.innerHTML;
}
else {
return '';
}
}
else {
return '';
}
}
setAcceptDrops(true); , :
void webview::dragEnterEvent(QDragEnterEvent *event)
{
event->accept();
QWebEngineView::dragEnterEvent(event);
}
void webview::dropEvent(QDropEvent * event)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt How to use connect between incompatible signal and slotIn this I want to call a function, that function will receive a point . But this function should be invoked by a timer's...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.