⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tst_qwebpage.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    int selectionStartOffset() {        return mainFrame()->evaluateJavaScript("window.getSelection().getRangeAt(0).startOffset").toInt();    }    int selectionEndOffset() {        return mainFrame()->evaluateJavaScript("window.getSelection().getRangeAt(0).endOffset").toInt();    }    // true if start offset == end offset, i.e. no selected text    int isSelectionCollapsed() {        return mainFrame()->evaluateJavaScript("window.getSelection().getRangeAt(0).collapsed").toBool();    }};void tst_QWebPage::cursorMovements(){    CursorTrackedPage* page = new CursorTrackedPage;    QString content("<html><body<p id=one>The quick brown fox</p><p id=two>jumps over the lazy dog</p><p>May the source<br/>be with you!</p></body></html>");    page->mainFrame()->setHtml(content);    // this will select the first paragraph    QString script = "var range = document.createRange(); " \        "var node = document.getElementById(\"one\"); " \        "range.selectNode(node); " \        "getSelection().addRange(range);";    page->mainFrame()->evaluateJavaScript(script);    QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox"));    // these actions must exist    QVERIFY(page->action(QWebPage::MoveToNextChar) != 0);    QVERIFY(page->action(QWebPage::MoveToPreviousChar) != 0);    QVERIFY(page->action(QWebPage::MoveToNextWord) != 0);    QVERIFY(page->action(QWebPage::MoveToPreviousWord) != 0);    QVERIFY(page->action(QWebPage::MoveToNextLine) != 0);    QVERIFY(page->action(QWebPage::MoveToPreviousLine) != 0);    QVERIFY(page->action(QWebPage::MoveToStartOfLine) != 0);    QVERIFY(page->action(QWebPage::MoveToEndOfLine) != 0);    QVERIFY(page->action(QWebPage::MoveToStartOfBlock) != 0);    QVERIFY(page->action(QWebPage::MoveToEndOfBlock) != 0);    QVERIFY(page->action(QWebPage::MoveToStartOfDocument) != 0);    QVERIFY(page->action(QWebPage::MoveToEndOfDocument) != 0);    // right now they are disabled because contentEditable is false    QCOMPARE(page->action(QWebPage::MoveToNextChar)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToPreviousChar)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToNextWord)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToPreviousWord)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToNextLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToPreviousLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToStartOfLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToEndOfLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToStartOfBlock)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToEndOfBlock)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToStartOfDocument)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::MoveToEndOfDocument)->isEnabled(), false);    // make it editable before navigating the cursor    page->setContentEditable(true);    // here the actions are enabled after contentEditable is true    QCOMPARE(page->action(QWebPage::MoveToNextChar)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToPreviousChar)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToNextWord)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToPreviousWord)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToNextLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToPreviousLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToStartOfLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToEndOfLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToStartOfBlock)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToEndOfBlock)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToStartOfDocument)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::MoveToEndOfDocument)->isEnabled(), true);    // cursor will be before the word "jump"    page->triggerAction(QWebPage::MoveToNextChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 0);    // cursor will be between 'j' and 'u' in the word "jump"    page->triggerAction(QWebPage::MoveToNextChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 1);    // cursor will be between 'u' and 'm' in the word "jump"    page->triggerAction(QWebPage::MoveToNextChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 2);    // cursor will be after the word "jump"    page->triggerAction(QWebPage::MoveToNextWord);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 5);    // cursor will be after the word "lazy"    page->triggerAction(QWebPage::MoveToNextWord);    page->triggerAction(QWebPage::MoveToNextWord);    page->triggerAction(QWebPage::MoveToNextWord);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 19);    // cursor will be between 'z' and 'y' in "lazy"    page->triggerAction(QWebPage::MoveToPreviousChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 18);    // cursor will be between 'a' and 'z' in "lazy"    page->triggerAction(QWebPage::MoveToPreviousChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 17);    // cursor will be before the word "lazy"    page->triggerAction(QWebPage::MoveToPreviousWord);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 15);    // cursor will be before the word "quick"    page->triggerAction(QWebPage::MoveToPreviousWord);    page->triggerAction(QWebPage::MoveToPreviousWord);    page->triggerAction(QWebPage::MoveToPreviousWord);    page->triggerAction(QWebPage::MoveToPreviousWord);    page->triggerAction(QWebPage::MoveToPreviousWord);    page->triggerAction(QWebPage::MoveToPreviousWord);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 4);    // cursor will be between 'p' and 's' in the word "jumps"    page->triggerAction(QWebPage::MoveToNextWord);    page->triggerAction(QWebPage::MoveToNextWord);    page->triggerAction(QWebPage::MoveToNextWord);    page->triggerAction(QWebPage::MoveToNextChar);    page->triggerAction(QWebPage::MoveToNextChar);    page->triggerAction(QWebPage::MoveToNextChar);    page->triggerAction(QWebPage::MoveToNextChar);    page->triggerAction(QWebPage::MoveToNextChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 4);    // cursor will be before the word "jumps"    page->triggerAction(QWebPage::MoveToStartOfLine);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 0);    // cursor will be after the word "dog"    page->triggerAction(QWebPage::MoveToEndOfLine);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 23);    // cursor will be between 'w' and 'n' in "brown"    page->triggerAction(QWebPage::MoveToStartOfLine);    page->triggerAction(QWebPage::MoveToPreviousWord);    page->triggerAction(QWebPage::MoveToPreviousWord);    page->triggerAction(QWebPage::MoveToNextChar);    page->triggerAction(QWebPage::MoveToNextChar);    page->triggerAction(QWebPage::MoveToNextChar);    page->triggerAction(QWebPage::MoveToNextChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 14);    // cursor will be after the word "fox"    page->triggerAction(QWebPage::MoveToEndOfLine);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 19);    // cursor will be before the word "The"    page->triggerAction(QWebPage::MoveToStartOfDocument);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 0);    // cursor will be after the word "you!"    page->triggerAction(QWebPage::MoveToEndOfDocument);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 12);    // cursor will be before the word "be"    page->triggerAction(QWebPage::MoveToStartOfBlock);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 2);    // cursor will be after the word "you!"    page->triggerAction(QWebPage::MoveToEndOfBlock);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 12);    // try to move before the document start    page->triggerAction(QWebPage::MoveToStartOfDocument);    page->triggerAction(QWebPage::MoveToPreviousChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 0);    page->triggerAction(QWebPage::MoveToStartOfDocument);    page->triggerAction(QWebPage::MoveToPreviousWord);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 0);    // try to move past the document end    page->triggerAction(QWebPage::MoveToEndOfDocument);    page->triggerAction(QWebPage::MoveToNextChar);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 12);    page->triggerAction(QWebPage::MoveToEndOfDocument);    page->triggerAction(QWebPage::MoveToNextWord);    QVERIFY(page->isSelectionCollapsed());    QCOMPARE(page->selectionStartOffset(), 12);    delete page;}void tst_QWebPage::textSelection(){    CursorTrackedPage* page = new CursorTrackedPage;    QString content("<html><body<p id=one>The quick brown fox</p>" \        "<p id=two>jumps over the lazy dog</p>" \        "<p>May the source<br/>be with you!</p></body></html>");    page->mainFrame()->setHtml(content);    // this will select the first paragraph    QString script = "var range = document.createRange(); " \        "var node = document.getElementById(\"one\"); " \        "range.selectNode(node); " \        "getSelection().addRange(range);";    page->mainFrame()->evaluateJavaScript(script);    QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox"));    // these actions must exist    QVERIFY(page->action(QWebPage::SelectAll) != 0);    QVERIFY(page->action(QWebPage::SelectNextChar) != 0);    QVERIFY(page->action(QWebPage::SelectPreviousChar) != 0);    QVERIFY(page->action(QWebPage::SelectNextWord) != 0);    QVERIFY(page->action(QWebPage::SelectPreviousWord) != 0);    QVERIFY(page->action(QWebPage::SelectNextLine) != 0);    QVERIFY(page->action(QWebPage::SelectPreviousLine) != 0);    QVERIFY(page->action(QWebPage::SelectStartOfLine) != 0);    QVERIFY(page->action(QWebPage::SelectEndOfLine) != 0);    QVERIFY(page->action(QWebPage::SelectStartOfBlock) != 0);    QVERIFY(page->action(QWebPage::SelectEndOfBlock) != 0);    QVERIFY(page->action(QWebPage::SelectStartOfDocument) != 0);    QVERIFY(page->action(QWebPage::SelectEndOfDocument) != 0);    // right now they are disabled because contentEditable is false    QCOMPARE(page->action(QWebPage::SelectAll)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectNextChar)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectPreviousChar)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectNextWord)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectPreviousWord)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectNextLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectPreviousLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectStartOfLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectEndOfLine)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectStartOfBlock)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectEndOfBlock)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectStartOfDocument)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SelectEndOfDocument)->isEnabled(), false);    // make it editable before navigating the cursor    page->setContentEditable(true);    // here the actions are enabled after contentEditable is true    QCOMPARE(page->action(QWebPage::SelectAll)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectNextChar)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectPreviousChar)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectNextWord)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectPreviousWord)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectNextLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectPreviousLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectStartOfLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectEndOfLine)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectStartOfBlock)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectEndOfBlock)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectStartOfDocument)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SelectEndOfDocument)->isEnabled(), true);    delete page;}void tst_QWebPage::textEditing(){    CursorTrackedPage* page = new CursorTrackedPage;    QString content("<html><body<p id=one>The quick brown fox</p>" \        "<p id=two>jumps over the lazy dog</p>" \        "<p>May the source<br/>be with you!</p></body></html>");    page->mainFrame()->setHtml(content);    // this will select the first paragraph    QString script = "var range = document.createRange(); " \        "var node = document.getElementById(\"one\"); " \        "range.selectNode(node); " \        "getSelection().addRange(range);";    page->mainFrame()->evaluateJavaScript(script);    QCOMPARE(page->selectedText().trimmed(), QString::fromLatin1("The quick brown fox"));    // these actions must exist    QVERIFY(page->action(QWebPage::DeleteStartOfWord) != 0);    QVERIFY(page->action(QWebPage::DeleteEndOfWord) != 0);    QVERIFY(page->action(QWebPage::SetTextDirectionDefault) != 0);    QVERIFY(page->action(QWebPage::SetTextDirectionLeftToRight) != 0);    QVERIFY(page->action(QWebPage::SetTextDirectionRightToLeft) != 0);    QVERIFY(page->action(QWebPage::ToggleBold) != 0);    QVERIFY(page->action(QWebPage::ToggleItalic) != 0);    QVERIFY(page->action(QWebPage::ToggleUnderline) != 0);    // right now they are disabled because contentEditable is false    QCOMPARE(page->action(QWebPage::DeleteStartOfWord)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::DeleteEndOfWord)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SetTextDirectionDefault)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SetTextDirectionLeftToRight)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::SetTextDirectionRightToLeft)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::ToggleBold)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::ToggleItalic)->isEnabled(), false);    QCOMPARE(page->action(QWebPage::ToggleUnderline)->isEnabled(), false);    // make it editable before navigating the cursor    page->setContentEditable(true);    // here the actions are enabled after contentEditable is true    QCOMPARE(page->action(QWebPage::DeleteStartOfWord)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::DeleteEndOfWord)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SetTextDirectionDefault)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SetTextDirectionLeftToRight)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::SetTextDirectionRightToLeft)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::ToggleBold)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::ToggleItalic)->isEnabled(), true);    QCOMPARE(page->action(QWebPage::ToggleUnderline)->isEnabled(), true);    delete page;}QTEST_MAIN(tst_QWebPage)#include "tst_qwebpage.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -