diff --git a/include/spdlog/sinks/qt_sinks.h b/include/spdlog/sinks/qt_sinks.h index 22850961..25b2aae9 100644 --- a/include/spdlog/sinks/qt_sinks.h +++ b/include/spdlog/sinks/qt_sinks.h @@ -4,8 +4,8 @@ #pragma once // -// Custom sink for QPlainTextEdit or QTextEdit and its childs(QTextBrowser... etc) -// Building and using requires Qt library. +// Custom sink for QPlainTextEdit or QTextEdit and its childs(QTextBrowser... +// etc) Building and using requires Qt library. // #include "spdlog/common.h" @@ -17,75 +17,39 @@ #include // -// qtextedit_sink class +// qt_sink class // namespace spdlog { namespace sinks { -template -class qtextedit_sink : public base_sink { +template class qt_sink : public base_sink { public: - qtextedit_sink(QTextEdit *textedit = nullptr) { - if (textedit != nullptr) { - qtextedit_ = textedit; - } else { - throw spdlog_ex("Error opening QTextEdit"); - } + qt_sink(QObject *qt_object = nullptr, const std::string &meta_method = "") { + qt_object_ = qt_object; + meta_method_ = meta_method; } - ~qtextedit_sink() { flush_(); } + ~qt_sink() { flush_(); } protected: void sink_it_(const details::log_msg &msg) override { memory_buf_t formatted; base_sink::formatter_->format(msg, formatted); string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qtextedit_,"append", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); + QMetaObject::invokeMethod(qt_object_, meta_method_.c_str(), Qt::AutoConnection, + Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); } void flush_() override {} private: - QTextEdit* qtextedit_ = nullptr; -}; - -// -// qplaintextedit_sink class -// -template -class qplaintextedit_sink : public base_sink { -public: - qplaintextedit_sink(QPlainTextEdit *textedit = nullptr) { - if (textedit != nullptr) { - qplaintextedit_ = textedit; - } else { - throw spdlog_ex("Error opening QPlainTextEdit"); - } - } - - ~qplaintextedit_sink() { flush_(); } - -protected: - void sink_it_(const details::log_msg &msg) override { - memory_buf_t formatted; - base_sink::formatter_->format(msg, formatted); - string_view_t str = string_view_t(formatted.data(), formatted.size()); - QMetaObject::invokeMethod(qplaintextedit_, "appendPlainText", Qt::AutoConnection, Q_ARG(QString, QString::fromUtf8(str.data(), static_cast(str.size())).trimmed())); - } - - void flush_() override {} - -private: - QPlainTextEdit* qplaintextedit_ = nullptr; + QObject *qt_object_ = nullptr; + std::string meta_method_; }; #include "spdlog/details/null_mutex.h" #include -using qtextedit_sink_mt = qtextedit_sink; -using qtextedit_sink_st = qtextedit_sink; - -using qplaintextedit_sink_mt = qplaintextedit_sink; -using qplaintextedit_sink_st = qplaintextedit_sink; - +using qt_sink_mt = qt_sink; +using qt_sink_st = qt_sink; } // namespace sinks // @@ -93,33 +57,37 @@ using qplaintextedit_sink_st = qplaintextedit_sink; // template inline std::shared_ptr -qtextedit_logger_mt(const std::string &logger_name, - QTextEdit *qtextedit = nullptr) { - return Factory::template create(logger_name, - qtextedit); +qt_logger_mt(const std::string &logger_name, QTextEdit* qt_object, const std::string &meta_method = "append") { + return Factory::template create(logger_name, qt_object, meta_method); } template inline std::shared_ptr -qtextedit_logger_st(const std::string &logger_name, - QTextEdit *qtextedit = nullptr) { - return Factory::template create(logger_name, - qtextedit); +qt_logger_st(const std::string &logger_name, QTextEdit* qt_object, const std::string &meta_method = "append") { + return Factory::template create(logger_name, qt_object, meta_method); } template inline std::shared_ptr -qplaintextedit_logger_mt(const std::string &logger_name, - QPlainTextEdit *qplaintextedit = nullptr) { - return Factory::template create(logger_name, - qplaintextedit); +qt_logger_mt(const std::string &logger_name, QPlainTextEdit* qt_object , const std::string &meta_method = "appendPlainText") { + return Factory::template create(logger_name, qt_object, meta_method); } template inline std::shared_ptr -qplaintextedit_logger_st(const std::string &logger_name, - QPlainTextEdit *qplaintextedit = nullptr) { - return Factory::template create(logger_name, - qplaintextedit); +qt_logger_st(const std::string &logger_name, QPlainTextEdit* qt_object, const std::string &meta_method = "appendPlainText") { + return Factory::template create(logger_name, qt_object, meta_method); +} + +template +inline std::shared_ptr +qt_logger_mt(const std::string &logger_name, QObject* qt_object, const std::string &meta_method) { + return Factory::template create(logger_name, qt_object, meta_method); +} + +template +inline std::shared_ptr +qt_logger_st(const std::string &logger_name, QObject* qt_object, const std::string &meta_method) { + return Factory::template create(logger_name, qt_object, meta_method); } } // namespace spdlog