简单实现生成函数模板
功能:做了个类似ide 中声明函数后,快捷键生成实现的模板
主要逻辑:在格式如 returnType functionName(参数列表); 的字符串中,
找到第一个空格前的字符 就是returnType
找到第一个左括号之前到前面空格中的字符串就是functionName
找到第一个左括号之后的全部内容,去除末尾的分号
将这些参数拼接即可。
扩展:可对returnType 类型进行校验。可根据returnType 类型 生成 具体return默认值
展示:
#include <QWidget>
#include<QKeyEvent>
#include<QTextCursor>
#include<QTextBlock>
#include<QTextEdit>
#include<QPlainTextEdit>
#include<QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
bool isValidFunctionName(const QString& name);
public slots:
void generateFunctionImplementation();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->btnGenerate,&QPushButton::clicked,this,&Widget::generateFunctionImplementation);
}
Widget::~Widget()
{
delete ui;
}
bool Widget::isValidFunctionName(const QString &name)
{
// 可以添加一些逻辑来检查函数名的有效性,例如检查是否是合法的标识符
// 暂时简单处理,只要名称不为空即认为有效
return !name.isEmpty();
}
void Widget::generateFunctionImplementation()
{
QTextCursor cursor = ui->textEdit->textCursor();
QString currentLine = cursor.block().text().trimmed(); // 获取当前行的文本去除前后空格
// 寻找第一个左括号的位置,确定函数名结束的位置
int endPos = currentLine.indexOf('(');
if (endPos == -1) {
return; // 如果找不到'(',可能不是有效的函数声明,可以添加错误处理或提示用户
}
// 寻找空格,确定返回类型的开始位置
int firstSpaceIndex = currentLine.indexOf(' '); // 找到第一个空格的位置
if (firstSpaceIndex == -1) {
return; // 如果找不到空格,可能不是有效的函数声明,可以添加错误处理或提示用户
}
// 提取返回类型
QString returnType = currentLine.left(firstSpaceIndex).trimmed();
qDebug()<<"returnType"<<returnType;
// 从第一个空格后面开始查找左括号的位置
int leftParenthesisIndex = currentLine.indexOf('(', firstSpaceIndex);
QString functionName;
QString parameters;
if (leftParenthesisIndex != -1)
{
// 提取从空格后到左括号前的字符串
functionName = currentLine.mid(firstSpaceIndex + 1, leftParenthesisIndex - firstSpaceIndex - 1);
qDebug() << "空格后到左括号之间的字符串:" << functionName;
// 检查是否是有效的函数名
if (!isValidFunctionName(functionName)) {
return; // 可以添加错误处理或者提示用户
}
// 提取参数列表,包括括号内的内容
parameters = currentLine.mid(leftParenthesisIndex,currentLine.length()-leftParenthesisIndex-1).trimmed();
qDebug()<<"parameters"<<parameters;
}
// 生成函数定义
QString functionDefinition = QString("\n%1 %2%3\n{\n \n}\n\n").arg(returnType, functionName, parameters);
// 计算当前行的结束位置
int currentLineEndPosition = cursor.block().position() + currentLine.length();
// 在当前行的下一行插入函数定义
cursor.setPosition(currentLineEndPosition);
cursor.insertText("\n" + functionDefinition);
// 移动光标到新插入函数定义的末尾,准备编辑实现
cursor.movePosition(QTextCursor::PreviousBlock);
cursor.movePosition(QTextCursor::End);
// 更新文本编辑器的光标位置
ui->textEdit->setTextCursor(cursor);
}
