Qt遍历文本搜索关键字
来源:互联网 发布:淘宝的店铺经营许可 编辑:程序博客网 时间:2024/05/01 23:14
转自:http://cool.worm.blog.163.com/blog/static/64339006200842633913611/
在项目开发中,经常有一些特殊的需求,基本上没人帮助,也许仅仅是几段代码,可能要自己搞上一阵子!
也许Qt的例子程序会为你提供些答案,利用QSyntaxHighlighter类文本中指定特殊字段特显。
$QTDIR\examples\richtext\syntaxhighlighter,是个很好的示例。
相信"Visual Assist X"这个Visual C++插件很多人都不陌生,也许在示例中你能找到通过Qt实现遍历文本搜索关键字的答案。
第一次贴图还挺成功,^_^ ,当然这里还是用一个简单化的代码对QSyntaxHighlighter类进行讲解!
QSyntaxHighlighter类的关键是virtual void highlightBlock( const QString & text ) = 0;这里纯虚函数;
这意味着QSyntaxHighlighter类是一个抽象类,所以必须自己写个相关的类,继承QSyntaxHighlighter类,并在当中实现highlightBlock()这个函数。并且与相应的文本或文档(QTextEdit、QTextDocument)关联在一起。
先写一个Highlighter类,目的是让文本中能够对指定的关键字进行特定颜色的显示;
//highlighter.h头文件部分
#include <QSyntaxHighlighter>
#include <QHash>
#include <QTextCharFormat>
class QTextDocument;class Highlighter : public QSyntaxHighlighter
{
public:
Highlighter(QTextEdit *parent = 0);
void highlightBlock(const QString &text);
//添加指定规则,对指定的关键字进行,特定颜色的显示
void setColorText(const QString &str, const QColor &color);
//清空所有规则
void clearRules();private:
struct HighlightingRule
{
QRegExp pattern;
QTextCharFormat format;
};
QVector<HighlightingRule> highlightingRules;
};//highlighter.cpp源文件部分
#include "highlighter.h"Highlighter::Highlighter(QTextEdit *parent)
: QSyntaxHighlighter(parent)
{
highlightingRules.clear();
}void Highlighter::highlightBlock(const QString &text)
{
foreach (HighlightingRule rule, highlightingRules)
{
QRegExp expression(rule.pattern);
int index = text.indexOf(expression);
while (index >= 0)
{
int length = expression.matchedLength();
setFormat(index, length, rule.format);
index = text.indexOf(expression, index + length);
}
}
}void Highlighter::SetColorText(const QString &str, const QColor &color)
{
HighlightingRule rule;
rule.pattern = QRegExp("\\b"+str+"\\b");
QTextCharFormat format;
format.setForeground(color);
rule.format = format;
highlightingRules.append(rule);
}void Highlighter::clearRules()
{
highlightingRules.clear();
}
下面写一个MainWindow类,通过打开的*.txt文件,当中若有"vic.MINg"显示出蓝色。
#include <QMainWindow>
#include "highlighter.h"
class QTextEdit;//mainwindow.h头文件
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);public slots:
void newFile();
void openFile(const QString &path = QString());private:
void setupEditor();
void setupFileMenu();QTextEdit *editor;
Highlighter *highlighter;
};//mainwindow.cpp源文件
#include <QtGui>#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setupFileMenu();
setupEditor();setCentralWidget(editor);
setWindowTitle(tr("Syntax Highlighter"));
}void MainWindow::newFile()
{
editor->clear();
}void MainWindow::openFile(const QString &path)
{
QString fileName = path;if (fileName.isNull())
fileName = QFileDialog::getOpenFileName(this,
tr("Open File"), "", "txt Files (*.txt)");if (!fileName.isEmpty()) {
QFile file(fileName);
if (file.open(QFile::ReadOnly | QFile::Text))
editor->setPlainText(file.readAll());
}
}void MainWindow::setupEditor()
{
QFont font;
font.setFamily("Courier");
font.setFixedPitch(true);
font.setPointSize(10);editor = new QTextEdit;
editor->setFont(font);highlighter = new Highlighter(editor);
highlighter->setColorText("vic.MINg", Qt::blue);
}void MainWindow::setupFileMenu()
{
QMenu *fileMenu = new QMenu(tr("&File"), this);
menuBar()->addMenu(fileMenu);fileMenu->addAction(tr("&New"), this, SLOT(newFile()),
QKeySequence(tr("Ctrl+N", "File|New")));
fileMenu->addAction(tr("&Open..."), this, SLOT(openFile()),
QKeySequence(tr("Ctrl+O", "File|Open")));
fileMenu->addAction(tr("E&xit"), qApp, SLOT(quit()),
QKeySequence(tr("Ctrl+Q", "File|Exit")));
}
最后完成main()函数;
#include <QApplication>
#include "mainwindow.h"int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.resize(640, 512);
window.show();
return app.exec();
}
其实比较懒,可以多做一个对话框,输入先关的关键字和颜色,然后让文本对特殊字段特显。用Highlighter::clearRules()来清空特显效果。
- Qt遍历文本搜索关键字
- 搜索包含关键字的文本
- 如何给网站搜索添加关键字和搜索文本
- C#实现在Excel中搜索文本(遍历操作)
- Python遍历目录和搜索文件中的关键字
- 文本搜索
- 关键字搜索
- 关键字搜索
- MFC点点滴滴——文本中搜索关键字(方法总结)
- php 根据用户提交关键字,进行搜索展示(按行 文本)
- Qt实现输入框,组合框提示,模糊查询,搜索关键字下拉提示功能
- 文本的关键字提取
- 关键字过滤文本
- 遍历目录查找文本
- 基于文本的搜索
- 搜索、替换文本
- BMH文本搜索算法
- Lucene 文本搜索
- Android学习之Button事件实现方法的总结
- CentOS 64位安装hadoop
- Android meta-data的使用以及含义
- linux网络配置命令之ifconfig、ip和route
- CSS选择器
- Qt遍历文本搜索关键字
- 项目里的JAR包突然消失了
- 学习重要的几个QWidget和QFrame子类
- IOS 图片加载封装
- 静态成员和非静态成员的细节
- Find Minimum in Rotated Sorted Array II
- 通过ssh隧道访问mysql
- 我们平常所用的内存,你真的了解吗?
- Android SDK代理服务器解决国内不能更新下载问题