简单实现生成函数模板
功能:做了个类似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); }