简单实现生成函数模板

功能:做了个类似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);
}




全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务