最近一入Qt就无法自拔了,为了完工这个项目,连续四五天都是一点多才睡的,加上前前后后调试总共花了我一周时间。主要实现功能有:可多人交互聊天、换肤、C/C++关键字高亮、带编译、可跳转至浏览器。
开发环境:
Qt4.8 + Linux
初衷:
做这个项目的初衷是由于长期使用Sublime Text3,萌生了想自己做一个的想法,并且想在上面添加一些自己想要的功能。不过由于个人能力有限,也删减了许多功能。
需求确定:
- 1、输入文本
- 2、保存本地
- 3、打开本地文件、新建文件
- 4、换肤
- 5、实时更新行列号
- 6、C/C++语法高亮
- 7、搭建聊天室服务器
- 8、添加聊天客户端
- 9、可跳转浏览器
通过将需求罗列,每天完成指定的功能,一方面能合理分配时间,另一方面也能通过各模块实现得到反馈,有继续开发的动力。
下面展示一下界面(有点简单)
1、行列号是通过光标位置来确定的
2、关键字高亮通过调用QRegExp,即正则表达式来匹配关键字符串并上色。
3、从左到右的菜单栏按钮依次是新建文件、保存文件、打开文件、换肤、编译、聊天、和Google。
- 前面三个功能调用Qt的QFile和QFileDialog头文件中的函数就可以完成。
- 换肤功能演示:
就是简单的运用信号和槽函数通过切换资源文件名来切换背景图片。
- 编译演示
运行的是显示当前时间的程序
如果程序出错会提示错误信息
实现原理也很简单,实际上是调用外部进程执行gcc 命令实现的(QProcess) - 聊天功能:
首先要先运行服务端创建聊天室,这里采用的TCP/IP协议
客户端可以通过输入IP和账号进行连接(端口已默认设置)
联网功能就是调用URL,实际上就是一个类似超链接的过程,这里就不详细赘述了。
部分实现代码:
关键字高亮类keyhighlight: - 头文件
#ifndef KEYHIGHLIGHT_H
#define KEYHIGHLIGHT_H
#include <QSyntaxHighlighter>//高亮库
#include <QTextCharFormat>//字体格式设置
#include <QTextDocument>
#include <QRegExp>//正则表达式
class Keyhighlight : public QSyntaxHighlighter
{
Q_OBJECT
public:
Keyhighlight(QTextDocument *parent = 0);
void highlightBlock(const QString &text);
private:
struct HighlightRule
{
QRegExp pattern;
QTextCharFormat format;
};
void setNormalFormat();
void setDigitalFormat();
void setFuncFormat();
void setKeywordFormat();
void setStringFormat();
void setCommentFormat();
QVector<HighlightRule> highlightRules;//高亮规则容器
QRegExp commentStartExpression;
QRegExp commentEndExpression;
//由于高亮设置会依次覆盖前面的 所以越后面优先级越高
QTextCharFormat normalFormat;//普通文本
QTextCharFormat digitalFormat;//数字
QT