【问题标题】:Logger class using qInstallMessageHandler can not find pointer to function?使用 qInstallMessageHandler 的 Logger 类找不到函数指针?
【发布时间】:2015-08-13 10:46:36
【问题描述】:

我有一个 MyLogger 类,它将处理所有的日志记录活动。因此我尝试使用这个example

所以我的来源是:

MyLogger::MyLogger(QWidget *parent) :
  QDialog(parent),
  ui(new Ui::MyLogger)
{
  ui->setupUi(this);

#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
  qInstallMessageHandler(myMessageOutput);
#else
  qInstallMsgHandler(myMessageOutput);
#endif

}

#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
void myMessageOutput(QtMsgType type, const QMessageLogContext &, const QString & str)
{
    const char * msg = str.toStdString().c_str();
#else
void myMessageOutput(QtMsgType type, const char *msg)
{
#endif
    switch (type)
    {
        case QtDebugMsg:
            fprintf(stderr, "Debug: %s\n", msg);
            break;
        case QtWarningMsg:
            fprintf(stderr, "Warning: %s\n", msg);
            break;
        case QtCriticalMsg:
            fprintf(stderr, "Critical: %s\n", msg);
            break;
        case QtFatalMsg:
            fprintf(stderr, "Fatal: %s\n", msg);
            abort();
    }
}

然后我得到一个:

错误:“myMessageOutput”未在此范围内声明
qInstallMessageHandler(myMessageOutput);

【问题讨论】:

    标签: c++ qt qdebug


    【解决方案1】:

    要么将 myMessageOutput() 移动到 MyLogger::MyLogger() 之前,要么在此之前使用单独的声明。

    【讨论】:

    • 我把它搬上去了!但是当我在我的应用程序的其他地方调用 qDebug() 时,旧样式被调用???
    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多