首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展QDebug和抑制消息

扩展QDebug和抑制消息
EN

Stack Overflow用户
提问于 2021-08-26 10:04:39
回答 1查看 19关注 0票数 0

当跟踪被禁用时,我们需要抑制qDebug()消息。我知道我们正在使用qInstallMessageHandler(),但我们还需要一个额外的trace方法。

代码语言:javascript
复制
class MyDebug : public QDebug {
  public:
    explicit MyDebug();
    MyDebug(const QDebug &o);
    MyDebug(const MyDebug &o);
    
  private:
    std::shared_ptr<QString> null_string;
    static void doDeleteLater(QString *obj);
};

MyDebug::MyDebug()
    : null_string(new QString(), &MyDebug::doDeleteLater), QDebug(null_string.get()) {
    qCritical("construct");
}

void MyDebug::doDeleteLater(QString *obj) {
    qCritical("delete");
}

MyDebug::MyDebug(const QDebug &o)
    : QDebug(o) {
    qCritical("called1");
}

MyDebug::MyDebug(const MyDebug &o)
    : null_string(o.null_string), QDebug(null_string.get()) {
    qCritical("called2");
}

MyDebug Application::trace(const uchar verbosity) const {
    MyDebug d = this->logLevel > 6 ? MyDebug(qDebug()) : MyDebug();

    // QDebug default verbosity is 2 - Range 0-7
    d.setVerbosity(qMin((uchar)7, verbosity));

    return d;
}

现在使用Application::trace()会导致错误

代码语言:javascript
复制
Application::trace() << QString("test");

...
construct
QTextStream: No device
delete

我认为这与复制MyDebug时null_string的生命周期有关,但复制构造函数从未调用过。

使用堆构造的QString*作为QDebug设备是可行的。

EN

回答 1

Stack Overflow用户

发布于 2021-08-26 11:21:55

安装自定义处理程序,如下所示:

代码语言:javascript
复制
#include <QtGlobal>

QtMessageHandler DEFAULT_MSG_HANDLER = 0;

void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    if (type == QtDebugMsg) {
        // Ignores debug.
        return;
    }
    // Redirects anything else to the default handler.
    (*DEFAULT_MSG_HANDLER)(type, context, msg);
}

int main(int argc, char **argv)
{
    DEFAULT_MSG_HANDLER = qInstallMessageHandler(myMessageHandler);
    QApplication app(argc, argv);

    // ...

    return app.exec();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68936491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档