2014-07-20 359 views
4

是否可以使用QML組件創建簡單的富文本編輯器?QML富文本編輯器

我現在想用TextArea來做到這一點,但它看起來沒有能力使用格式化文本。當然,我可以這樣做:

ToolButton { 
text: "Bold" 
onClicked: { 
    var start = textArea.selectionStart; 
    var end = textArea.selectionEnd; 
    var text = textArea.getText(start,end); 
    text = "<strong>" + text + "</strong>"; 
    textArea.remove(start,end); 
    textArea.insert(start,text); 
} 
} 

但我仍然無法檢測到光標下的文本格式。

如果有人能分享一些代碼片段或其他東西,我會很高興。

任何意見將不勝感激。

+0

中有一個很好的例子'但我仍然無法檢測到cursor下的文本格式。你想達到什麼目的? – lpapp

+0

通常,當您在文本編輯器中的任意位置單擊時,都可以在光標下獲取文本格式。例如,如果選中的文本爲粗體,則可以選中「粗體」按鈕。 – folibis

+1

你有沒有考慮過使用WebView? HTML/Javascript中有大量現有的富文本編輯器可以滿足您的需求。 – MrEricSir

回答

0

你要找的是文本編輯組件:

http://qt-project.org/doc/qt-5/qml-qtquick-textedit.html

使用它,它不應該是很難實現富文本編輯器只與QML

QtQuick文本編輯和擴展QtQuick.Controls TextArea在Qt 5.2或更高版本中公開了'textDocument'屬性,該屬性是一個QQuickTextDocument指針,該指針又可以被轉換爲QTextDocument(是的,與QWidgets中的相同),它可以用於C++端從TextEdit獲取信息例如光標位置和當前塊格式...但是對於簡單的EDITING(沒有信息檢索),在QML端的純JS可能就足夠了(只需修改text屬性以使用例如插入HTML標籤)。正則表達式...)。

+0

你知道,我無法在TextEdit和TextArea之間找到任何區別。相同的屬性,相同的方法。不幸的是,他們都沒有工具來構建簡單豐富的編輯器。 – folibis

+0

@folibis:你知道,在QtQuick控件的例子中,有一個使用TextArea的QtWidgets文本編輯器演示的端口,所以它顯然是可行的! – TheBootroo

+0

是的,請參閱下面的答案) – folibis

1

Oк,在搜索完所有的互聯網後:)我得出結論,現在不可能只用QML來編寫一個豐富的編輯器。使用C++可以輕鬆完成,並且在$ QTDIR/Src/qtquickcontrols/examples/quick/controls/texteditor/

+0

你錯了,這不是不可能的。你可以在qml中做很多事情。看看我的例子。 – BlueMagma

+0

好的,假設你在你的編輯器中有這樣的HTML:' string1 string2'。你點擊'string2'。你怎麼能從你的例子中得到什麼字體名稱,你必須在字體組合框中突出顯示?假設你在我的例子的工具欄 – folibis

+0

中有字體組合框,你不能。但你可以使用事件onSelectionChanged,並使用regExp來檢測周圍的塊 – BlueMagma