Russian Qt Forum
Апрель 25, 2024, 04:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Категория журналирования QLoggingCategory  (Прочитано 3561 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« : Февраль 20, 2023, 12:00 »

Коллеги,
понадобилось мне в одном из модулей Qt подкрутить журналирование. Я создал новую категорию, например,
Код
C++ (Qt)
Q_DECLARE_LOGGING_CATEGORY(MODBUS_RTU_VIA_TCP),
присвоил ей имя
Код
C++ (Qt)
Q_LOGGING_CATEGORY(MODBUS_RTU_VIA_TCP, "qt.modbus.rtu_via_tcp")
Соответственно, в модуле использую
qCWarning(MODBUS_RTU_VIA_TCP) << что-то там...
Это все я затеял, для того, чтобы фильтром
Код
C++ (Qt)
QLoggingCategory::setFilterRules(QString("qt.modbus.rtu_via_tcp = false"));
управлять записью в журнал некоторых специфических сообщений, которые мне не нужны.
Но беда в том, что в проме я не везде могу апдейтить эти библиотеки. Поэтому кое-где мне вместо вышеуказанного фильтра придется ставить
Код
C++ (Qt)
QLoggingCategory::setFilterRules(QString("qt.modbus* = false"));
Вопрос состоит в том, как определить, существует ли категория MODBUS_RTU_VIA_TCP с именем "qt.modbus.rtu_via_tcp"?

Заглянул в исходники qloggingcategory.h, там определен макрос
Код
C++ (Qt)
#define Q_DECLARE_LOGGING_CATEGORY(name) \
   extern const QLoggingCategory &name();
 
Т.е. определяется глобальная переменная. Знаю, что средствами C++ проверить наличие переменных невозможно. Но, может быть, в Qt есть какое-нибудь средство для этого?

PS Пока составлял это сообщение, появилась мысль - в классе создать property, которую можно проверять. Правда, это не очень удобно, но надо подумать.
« Последнее редактирование: Февраль 20, 2023, 18:58 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #1 : Февраль 20, 2023, 18:57 »

Так и сделал. В конструкторе класса использовал setProperty("rtu_via_tcp", true), при создании объекта проверяю obj.property("rtu_via_tcp").isValid().
Сделал и выбросил на помойку Улыбающийся
Ограничился фильтром QLoggingCategory::setFilterRules(QString("qt.modbus.warning = false"));
Таким образом потеряю пару лишних предупреждений, но с этим можно мириться.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.139 секунд. Запросов: 22.