Как получить текущее имя файла во фрагменте кода - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь создать фрагмент кода, который будет печатать некоторые журналы консоли с текущим именем файла и текущим именем метода / тега, как у нас systr в затмении.

Хотя я могу добавитьфрагмент кода в Инструменты> Параметры> Текстовый редактор> Фрагмент , я не смог найти тег для получения имени текущего файла.

Файл примера (TestMyUI.js):

function doSomething{
console.log("TestMyUI.doSomething()");
}

Здесь мне нравится генерировать console.log, используя шаблон, сохраненный во фрагментах.Так что для каждого места, где я набираю что-то вроде consLog, оно должно автоматически заполнять журнал, заполненный текущим файлом и именем метода.Это похоже на то, что у нас есть systr в IDE затмения.

Ответы [ 2 ]

0 голосов
/ 20 июля 2018

Добавление к ответу @dtech:

Восстановление файла, строки и функции уже является неотъемлемой частью регистрации в Qt.Все, что вам нужно сделать, это использовать его правильно.Для этого не требуется фрагмент кода, так как вся эта информация уже собрана console.log, но не показывается по умолчанию.Все, что вам нужно сделать сейчас, это сказать Qt, чтобы он стал видимым.

Способ, который проще, чем создание собственного обработчика сообщений, - просто зарегистрировать шаблон сообщения (см. qSetMessagePattern).,При этом вы можете зарегистрировать шаблон, который следует использовать для форматирования всего, что регистрируется через QDebug (включая QML).Простой пример:

int main(int argc, char **argv) {
    qSetMessagePattern("%{file}:%{line} %{function} -> %{if-category}%{category}: %{endif}%{message}");

    QGuiApplication app(argc, argv);
    // ...
}

Теперь в вашем QML-файле просто регистрируйте что угодно, и ваше дело.Например, следующий код:

function doSomething() {
    console.log("test");
}

выведет для этого примера (созданный с фактическим тестовым файлом):

qrc:/TestMyUI.js:11 doSomething -> qml: test
0 голосов
/ 13 июля 2018

Если вы хотите получить эту информацию для файлов 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;
}

Теперь вы можете не захотетьобрабатывать все сообщения таким образом и ограничивать его каким-то конкретным шаблоном, чего легко достичь, включив определенный «заголовок» в строку сообщения и проверив, содержит ли это конкретное сообщение это или нет, и действуйте соответствующим образом.Например:

console.log("test") // regular msg
console.log("?test") // custom msg handling

Естественно, вы можете использовать массив заголовков для указания пользовательской обработки, сохранять журналы в разные файлы, отправлять сетевые сообщения или электронные письма в пользовательских форматах или что-то еще.Как только вы используете собственный обработчик, вы можете делать с сообщениями все, что захотите.

...