加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QTextEdit 作为窗口显示部件和编辑部件

(2013-12-04 21:22:31)
分类: Qt
【转载自:http://linluan55.blog.163.com/blog/static/17554239920110187141222/】

QTextEdit窗口部件提供了强大的单页面的多信息文本编辑器。

介绍和概念

QTextEdit是一个高级的所见即所得的支持使用HTML风格标记的多信息文本格式的查看器/编辑器。它对于处理大文档和快速相应用户的输入进行了优化。

QTextEdit操作的三个模式:

模式 命令 注释
一般文本编辑器 setTextFormat(PlainText) 使用setText()设置文本,text()可以返回一般文本。文本属性(比如颜色)可以被设置,但是一般文本总是被返回。1.
多信息文本编辑器 setTextFormat(RichText) 使用setText()设置文本,text()可以返回多信息文本。多信息文本编辑是相当受限制的。例如你不能设置边白或者插入图片(尽管你可以读取并且正确地显示具有边白和包含图片的文件)。这个模式对于编辑少量的多信息文本是非常有用的。2.
文本查看器3. setReadOnly(TRUE) 使用setText()或append()(这个没有撤销历史,所以更快并且使用更少的内存)来设置文本,text()根据textFormat()返回一般文本或者多信息文本。这个模式可以正确显示HTML中一个比较大的子集。

1.我们建议使用QTextEdit来创建语法高亮的编辑器,因为现在的应用编程接口对于这个目的是不够的。我们希望能在以后的发行中发行一个支持语法高亮的更加完整的应用编程接口。

2.在稍后的Qt发行中计划推出一个更完整的支持设置边白、图片等等的应用编程接口。

3.Qt 3.1将提供一个日志浏览器模式,它是专门为快速地并且有效使用内存地显示大量的只读文本而优化的。

我们建议你总是调用setTextFormat()来设置你想使用的模式。如果你是用AutoText,那么setText()和append()将会试图决定给定的文本是一般文本还是多信息文本。如果你使用RichText,那么setText()和append()总是假设给定的文本是多信息文本。insert()简单的插入给定的文本。

QTextEdit在段落和字符上工作。段落就是被自动换行来适应窗口部件的宽度的被格式化的字符串。默认情况下当读取一般文本时,两个换行符确定一个段 落。一个文档由零或更多个段落组成,索引从0开始。字符是基于每一个段落来被索引的,也是从0开始。段落中的单字根据段落的alignment()进行对齐。段落被硬换行分隔。段落中的字符都有自己的属性,例如字体和颜色。

文本编辑文档使用如下概念:

  • 当前格式 -- 这是当前光标位置的格式,如果存在被选择文本,也是它的格式。
  • 当前段落 -- 包含光标的段落。

QTextEdit可以显示图片(使用QMimeSourceFactory)、列表和表格。如果文本太大以至于不能在文本编辑的视口中查看时,滚动条将会出现。文本编辑可以载入一般文本和HTML文件(HTML3.2和4的子集)。表现风格和有效标记集由styleSheet()来定义。自定义标记可以被创建并且被放置到样式单中。可以使用setStyleSheet()改变样式单,具体情况请参考QStyleSheet。通过图片标记识别的图片如果它们可以被使用文本编辑的QMimeSourceFactory解释的话就可以被显示,请参考setMimeSourceFactory()。

如果你想要一个有更多导航的文本浏览器,请使用QTextBrowser。如果你只是想显示一小条多信息文本,请使用QLabel或者QSimpleRichText

如果你创建一个新的QTextEdit并且想允许用户编辑多信息文本,请调用setTextFormat(Qt::RichText) 来确保文本被看做多信息文本。(多信息文本使用HTML标记来设置文本格式属性。关于被支持的HTML标记的信息请参考QStyleSheet。)如果你 不明确地调用setTextFormat(),文本编辑将会猜测文本自己是多信息文本还是一般文本。这也就是说如果文本看起来像HTML或XML,它可能 被解释为多信息文本,所以你应该调用setTextFormat(Qt::PlainText)来保护这些文本。

注意我们并不是要为Qt添加一个具有所有特征的网页浏览器窗口部件(因为这将很容易使Qt的大小加倍并且只有很少的应用程序可以从这里受益)。Qt中的多信息文本支持是被设计为应用程序提供一个快速、可移植并且有效率地方式来添加合理的在线帮助工具,并且提供一个多信息文本编辑器的基础。

使用QTextEdit作为一个显示窗口部件

QTextEdit可以显示一个包括表格和图片的大的HTML子集。

文本通过使用setText()来设置或者替换,它删除任何已经存在的文本并且用传递给setText()调用的文本替换它。如果你使用继承HTML(强制使用setTextFormat(RichText))调用setText(),并且然后调用text(),返回的文本可能有不同的标签,但是它们呈现的都是一样的。文本可以使用insert()、paste()、pasteSubType()和append()来插入。被添加的文本没有进入撤销历史中,这使得append()更快并且消耗更少的内存。文本也可以被cut()。整个文本可以使用clear()来被删除并且被选择的文本可以使用removeSelectedText()来被删除。被选择(被标记)的文本也可以使用del()来被删除(如果没有文本被选择,这将删除光标右面的字符)。

可以使用setText()和text()来达到载入和保存文本的目的,例如:

    QFile file( fileName ); // 从文件中读取文本
if ( file.open( IO_ReadOnly ) ) {
QTextStream ts( &file );
textEdit->setText( ts.read() );
}
    QFile file( fileName ); // 把文本写入到文件中
if ( file.open( IO_WriteOnly ) ) {
QTextStream ts( &file );
ts << textEdit->text();
textEdit->setModified( FALSE );
}

默认这个文本编辑会在空白符号处自动换行来适应文本编辑窗口部件。setWordWrap()函数用来指定你想要的自动换行方式,或者如果你不像要任何自动换行,请使用NoWrap。调用setWordWrap()来设置固定的像素宽度FixedPixelWidth,或者由setWrapColumnOrWidth()确定的像素或者列数的字符列数(例如80列)FixedColumnWidth。如果你是用自动换行来适应窗口部件的宽度WidgetWidth,你可以使用setWrapPolicy()来指定是在空白符号或者任何地方自动换行。

背景色的设置与其它窗口部件不同,使用setPaper()。你可以指定画刷风格是一个普通颜色或者一个复杂的像素映射。

超文本链接可以自动加上下划线,这个可以通过setLinkUnderline()来改变。tab stop宽度可以使用setTabStopWidth()来设置。

zoomIn()和zoomOut()函数能够用来通过增加(对于zoomOut()是减少)使用的点的大小来重新定义文本的大小。

lines()函数返回文本中的行数并且paragraphs()返回段落数。特定段落中的函数可以通过linesOfParagraph()返回。整个文本的字符长度可以通过length()返回。

你可以滚动到文本中的一个锚,也就是通过scrollToAnchor()到达<a name="anchor">find()函数可以被用来找到和选择文本中的给定字符串。

只读的QTextEdit提供了和(废弃的)QTextEdit相同的功能。(QTextView仍被提供用来保证旧代码的兼容性。)

只读的键绑定

当QTextEdit被使用的时候,只读的键绑定仅限于浏览,并且文本只能被鼠标选定:

按键 操作
UpArrow 向上移动一行
DownArrow 向下移动一行
LeftArrow 向左移动一个字符
RightArrow 向右移动一个字符
PageUp 向上移动一页(视口)
PageDown 向下移动一页(视口)
Home 移动到文本开始处
End 移动到文本结束处
Shift+Wheel 水平的滚动文本(Wheel就是鼠标滚轮)
Ctrl+Wheel 缩放文本

文本编辑也可以提供一些元信息。例如,documentTitle()函数将返回来自HTML的<title>标签中的文本。

文本编辑中显示的文本有一个context。context就是文本编辑的QMimeSourceFactory用来解析文件和图片的定位的路径。当查询数据时,它被传递给mimeSourceFactory()。(请参考See QTextEdit()和context()。)

使用QTextEdit作为一个编辑器

使用QTextEdit作为显示窗口部件的所有信息这里也适用。

当前格式属性可以通过setItalic()、setBold()、setUnderline()、setFamily()(字体族)、setPointSize()、setColor()和setCurrentFont()来设置。当前段落的对齐方式使用setAlignment()来设置。

使用setSelection()来选择文本。setSelectionAttributes()函数用来指出被选择文本应该如何被显示。使用hasSelectedText()来搜索是否有任何文本被选择。当前被选择文本的位置可以由getSelection()提供并且被选择文本本身被selectedText()返回。选择可以使用copy()来复制到剪贴板,或者使用cut()剪切到剪贴板中。它可以被removeSelectedText()删除。使用selectAll()可以选择(或者取消选择)整个文本。QTextEdit支持多重选择。绝大多数选择函数是在默认选择(选择区0)中操作。如果用户按下非选择键,例如没有按下Shift的情况下的一个光标键,所有选择都被清空。

使用setCursorPosition()和getCursorPosition()可以分别设置和获得光标的位置。当光标被移动,信号currentFontChanged()、currentColorChanged()和currentAlignmentChanged()被发射来影响新光标位置的字体、颜色和对齐方式。

如果文本改变了,textChanged()信号被发射,并且如果用户通过按下回车键或者换行键插入一个新行,returnPressed()被发射。如果文本已经被修改,isModified()函数将会返回真。

QTextEdit提供基于命令的撤销和恢复。使用setUndoDepth()可以设置命令历史的深度,默认为100步。调用undo()或redo()可以撤销或者恢复上一次操作。信号undoAvailable()和redoAvailable()表明撤销和恢复操作是否可以被执行。

indent()函数用来再次缩进一个段落。它对于代码编辑器是很有用的,例如,Qt设计器的代码编辑器中,Ctrl+I调用indent()函数。

编辑键绑定

编辑中被实现的键绑定的列表:

按键 操作
Backspace 删除光标左侧的字符
Delete 删除光标右侧的字符
Ctrl+A 移动光标到行首
Ctrl+B 向左移动光标一个字符
Ctrl+C 复制标定的文本到剪贴板(也就是Windows下的Ctrl+Insert
Ctrl+D 删除光标右侧的字符
Ctrl+E 移动光标到行尾
Ctrl+F 向右移动光标一个字符
Ctrl+H 删除光标左侧的字符
Ctrl+K 删除到行尾
Ctrl+N 移动光标到下一行
Ctrl+P 移动光标到上一行
Ctrl+V 把剪贴板文本粘贴到行编辑中(也就是Windows下的Shift+Insert
Ctrl+X 剪切标定的文本,复制到剪贴板(也就是Windows下的Shift+Delete
Ctrl+Z 撤销最后一次操作
Ctrl+Y 恢复最后一次操作
LeftArrow 向左移动光标一个字符
Ctrl+LeftArrow 向左移动光标一个单字
RightArrow 向右移动光标一个字符
Ctrl+RightArrow 向右移动光标一个单字
UpArrow 移动光标到上一行
Ctrl+UpArrow 移动光标到上一个单字
DownArrow 移动光标到下一行
Ctrl+Down Arrow 移动光标到下一个单字
PageUp 移动光标到上一页
PageDown 移动光标到下一页
Home 移动光标到行首
Ctrl+Home 移动光标到文首
End 移动光标到行尾
Ctrl+End 移动光标到文尾
Shift+Wheel 水平的滚动文本(Wheel就是鼠标滚轮)
Ctrl+Wheel 缩放文本

要选择(标定)文本,按下一个移动键的同时按住Shift键,例如Shift+右箭头将会选择右面的字符,并且Shift+Ctrl+右箭头将会选择右面的单字,等等。

默认情况下,文本编辑窗口部件在插入模式下工作,所以用户输入的文本都被插入到文本编辑中并且光标右面的文本都会移动到不碍事的地方。使用setOverwriteMode(),这个模式可以被改为覆盖,这时新文本将覆盖光标右面存在的任何文本。

也可以参考基本窗口部件文本相关类


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有