Chinaunix首页 | 论坛 | 博客
  • 博客访问: 461301
  • 博文数量: 107
  • 博客积分: 6073
  • 博客等级: 准将
  • 技术积分: 790
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-14 15:34
文章分类

全部博文(107)

文章存档

2010年(1)

2009年(106)

分类:

2009-09-11 16:14:24

作者:wangxinus,
来源:
http://wangxinus.cublog.cn
说明:转载请注明来源,交流请Email给作者


[说明]
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 )
的实现。


阅读(3152) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~