UPDATE:
沒有,據我可以戳在QtWebKit
慫恿說,你無法格式化textarea
的內容。
Format text in a <textarea>?
也許你可以用div
,看上去就像一個textarea
替換它,然後將圍繞特定單詞一些標籤。
但是,從我在這個問題上的工作中可以看出,這不可能與QWebElement
。
你可以去問問巨魔,看看他們是否有任何建議。
這裏是最接近的代碼。當網頁出現時,右鍵單擊頁面上的不同位置。
的main.cpp
#include <QApplication>
#include "webview.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WebView w;
w.show();
return a.exec();
}
webview.h
#ifndef WEBVIEW_H
#define WEBVIEW_H
#include <QWebView>
#include <QContextMenuEvent>
class WebView : public QWebView
{
Q_OBJECT
public:
explicit WebView(QWidget *parent = 0);
~WebView();
public slots:
void contextMenuEvent(QContextMenuEvent *);
private:
};
#endif // WEBVIEW_H
webview.cpp
#include "webview.h"
#include <QWebFrame>
#include <QWebElement>
#include <QWebElementCollection>
#include <QDebug>
WebView::WebView(QWidget *parent) :
QWebView(parent)
{
this->setUrl(QUrl("http://www.w3schools.com/tags/tag_textarea.asp"));
// right click on different parts of the web page
}
WebView::~WebView(){ }
void WebView::contextMenuEvent(QContextMenuEvent * cme)
{
QPoint pos = cme->pos();
QWebHitTestResult whtr = this->page()->frameAt(pos)->hitTestContent(pos);
QWebElement we = whtr.element();
if(we.isNull())
{
qDebug() << "WebElement is null.";
}
else
{
qDebug() << we.tagName() << "OuterXML <<<<<" << we.toOuterXml() << ">>>>>";
qDebug() << we.tagName() << "InnerXML <<<<<" << we.toInnerXml() << ">>>>>";
qDebug() << we.tagName() << "PlainText <<<<<" << we.toPlainText() << ">>>>>";
// TODO: replace the lines below with a better way of extracting words from the DOM and the HTML tags
// This current method modifies tags instead of just the text inside tags.
QStringList list = we.toPlainText().split(' ');
for(int i = 0; i < list.size(); i++)
{
// TODO: Insert dictionary logic here when examining words
if(list.at(i).size() > 5)
{
list[i] = "<span class=\"sp\" style=\"border-bottom: 1px dotted red;\">" + list.at(i) + "</span>";
}
}
qDebug() << list.join(" ");
we.setInnerXml(list.join(" "));
qDebug() << "-------------------------------------------";
}
}
因此,一些額外的研究(一些改變,你的問題後),這裏是我的方法將考慮:當頁面上執行右鍵點擊
,QWidget的(你QWebView)發出一個QContextMenuEvent
。
http://qt-project.org/doc/qt-4.8/qcontextmenuevent.html#details
獲取的位置了該事件,然後深入到你的網頁來找出它是:
獲取在點擊位置的肋骨......
QWebFrame * QWebPage::frameAt (const QPoint & pos) const
信息請在該位置的命中測試的內容...
QWebHitTestResult QWebFrame::hitTestContent (const QPoint & pos) const
查詢元素進行命中測試...
QWebElement QWebHitTestResult::element() const
仔細檢查內容是由用戶編輯...
bool QWebHitTestResult::isContentEditable() const
但是,這大約是據我已經得到了上這個研究項目。
如果您將頁面上的webelements重新設置爲拼寫錯誤類的span標籤,那麼您可以查找這些文件,然後創建自己的彈出式菜單,或編輯QWebView
的contextMenu
。
因此,不,頁面上的元素沒有上下文菜單,但是您可以模擬它,如果找到單擊的元素,然後更改QWidget
的contextMenu
。
http://qt-project.org/doc/qt-4.8/webkit-simpleselector.html
void Window::on_elementLineEdit_returnPressed()
{
QWebFrame *frame = webView->page()->mainFrame();
QWebElement document = frame->documentElement();
QWebElementCollection elements = document.findAll(elementLineEdit->text());
foreach (QWebElement element, elements)
element.setAttribute("style", "background-color: #f0f090");
}
http://qt-project.org/doc/qt-4.8/mainwindows-menus.html
void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu(this);
menu.addAction(cutAct);
menu.addAction(copyAct);
menu.addAction(pasteAct);
menu.exec(event->globalPos());
}
同樣,我希望幫助。
使用QWebKit的至於真棒例子,是這個項目:
How to create Web History for my Browser
https://code.google.com/p/arora/
我做回購的「咒語」和「拼寫檢查」並沒有什麼搜索有用的出現了。
至於調整上飛的HTML,花式瀏覽器示例展示它是如何做:
http://qt-project.org/doc/qt-4.8/webkit-fancybrowser-mainwindow-cpp.html
void MainWindow::rotateImages(bool invert)
{
QString code;
if (invert)
code = "$('img').each(function() { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(180deg)') })";
else
code = "$('img').each(function() { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(0deg)') })";
view->page()->mainFrame()->evaluateJavaScript(code);
}
他們只是使用jQuery和加載的網頁上運行額外的JavaScript。
因此,您大概可以用"$('img').each(
代替"$('textarea').each(
,並對區域的文本起作用。
您也可以在頁面上運行正則表達式或使用html解析器來查找所有
<textarea>
塊。
希望有所幫助。
我可以使用'QWebElement'獲取所有的DOM元素,我需要的是「下劃線」一個「
再次感謝,但正如我所說的**「單詞」**不是**「DOM元素」**(突出特定單詞),請參閱常規瀏覽器拼寫檢查,每個拼寫錯誤的單詞都加下劃線。這就是我所需要的,可能會添加「下劃線」實現輕鬆添加「事件」(因爲我的困難是增加了詞的視覺效果)。你可以幫幫我嗎? (注意:我編輯了我的問題,請參閱「示例」) –
而不是完全放棄您的問題,放入EDITED或UPDATED是非常有用的。這樣,當人們看到我爲我的答案提供的東西時,他們不認爲我完全錯過了你所問的內容。單個單詞的具體上下文菜單是可能的,但棘手。這就是我的答案所指的。有jQuery圖書館去和下劃線,並把你可以做拼寫檢查的鏈接。 http://jquery-spellchecker.badsyntax.co/使用webkit中的JavaScript渲染器可以應用類似的設置。 – phyatt