如何在代码片段中获取当前文件名

Rav*_*sha 5 qt qt4 qt-creator code-snippets

我正在尝试创建一个代码片段,它将打印一些带有当前文件名和当前方法/标签名称的控制台日志,就像我们在systrEclipse 中的方式一样。

虽然我可以在Tools > Options > Text editor > Snippet中添加代码片段,但我找不到任何标签来检索当前文件名。

示例文件(TestMyUI.js):

function doSomething{
console.log("TestMyUI.doSomething()");
}
Run Code Online (Sandbox Code Playgroud)

在这里,我喜欢console.log使用保存在片段中的模板来生成。因此,对于我输入类似内容的每个地方,consLog都必须自动完成填充当前文件和方法名称的日志。这与我们在 eclipse IDE 中的类似systr

dte*_*ech 1

如果您想获取 QML 文件的信息并将其集成到输出中,您可以使用

qInstallMessageHandler(QtMessageHandler handler)

安装您自己的消息处理函数。在该函数内,您将有一个QMessageLogContext引用,它可以让您访问更多信息,例如文件名、行号、函数名称等。

void msgHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
  static QTextStream ts(stdout);
  static const char * err[] = {"", "WARNING: ", "ERROR!: ", "FATAL: ", ""};
  QString m = QString(err[type]) + context.category + "/" + context.file + "@" + QString::number(context.line) + "-" + context.function + ": " + msg;  
  ts << msg << endl;
}
Run Code Online (Sandbox Code Playgroud)

现在,您可能不希望以这种方式处理所有消息,并将其限制为某种特定模式,这可以通过在消息字符串中合并特定“标头”并检查特定消息是否包含该标头来轻松实现,并且相应地进行。例如:

console.log("test") // regular msg
console.log("?test") // custom msg handling
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用标头数组来指定自定义处理、将日志保存到不同的文件、以自定义格式发送网络消息或电子邮件等。一旦使用自定义处理程序,您就可以对消息执行任何您想要的操作。