systaxhighlighter高亮文本处理类

[说明]
systaxhighlighter展示如何使用把一个c/c++源文件,按照一定方案高亮显示出来。

[流程]
1.建立一个QMainWindow作为框架,把一个QTextEdit作为其的centralWidget。既界面的主体是一个文本编辑的Widget。

2.Qt提供了用户高亮显示的类,QSyntaxHighlighter,这个类提供了处理文本,格式化显示的接口。但这个类本身是一个纯虚类(pure virtual), 所以必须继承这个类,并实现
void QSyntaxHighlighter::highlightBlock ( const QString & text )   [pure virtual protected]

在帮助手册(Qt Assist)中,关于这个函数有更详尽的描述并附带一个例子:
“Highlights the given text block. This function is called when necessary by the rich text engine, i.e. on text blocks which have changed.
高亮给出的文本块。这个函数会在需要的时候被rich text引擎调用,比如在文本块有改动时。
To provide your own syntax highlighting, you must subclass QSyntaxHighlighter and reimplement highlightBlock(). In your reimplementation you should parse the block's text and call setFormat() as often as necessary to apply any font and color changes that you require.
为了提供你定义的高亮规则,你必须继承QSyntaxHighlighter,并重新实现highlightBlock()。在你的重新实现中,你应该解析指定块中的文本,并在需要时调用setFormat()来应用你需要的字体和颜色的改变。

关于这个函数和示例的详细描述,可以参考帮助文档。

3.继承QSyntaxHighlighter类,并编写好自己高亮显示的Highlighter类。

其中定义了几个文本的类型,包括关键字, 类, 单行的注释, 多行的注释, 函数, 引号中的文本。文本的格式化需要用到QTextCharFormat, 可以保存文字的字体,颜色等属性。

由于需要解析文本块中的数据,以分辨出哪些是关键字,那些是注释等,需要一个字符串匹配处理的类,在Qt中同样提供了QRegExp类,来匹配选择文本中的符合要求的内容。

4.在MainWindow初始化阶段,我们需要设置QTextEdit,使其和早前编写的高亮显示类Highlighter绑定,在QTextEdit中填充文本时,高亮显示就会起作用。涉及到的函数有:
QTextDocument * QTextEdit::document () const
QSyntaxHighlighter::QSyntaxHighlighter ( QTextDocument * parent )

5.以上就是整个工程的大体工作,参考源代码可以发现,整个工程最重要的就是
void QSyntaxHighlighter::highlightBlock ( const QString & text )
的实现。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值