2014-07-20 308 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