0

単体テストの結果がジェンキンスコンソールに出力されるようにしています。しかし、私はできません。jenkins ビルド コンソールが qDebug を出力できないと考えています。そして、qdebugを印刷できないことを試しました。しかし、 std::cout は機能しています。どうすれば続行できますか?

ありがとうございました。言ってみました。しかし、それは機能しません。エラーが発生します。エラー: C3861: 'qInstallMsgHandler': 識別子が見つかりません

//! [0]

#include <QtTest/QtTest>
#include <qapplication.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <QDebug>
void myMessageOutput(QtMsgType type, const char *msg)
{
 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();
 }
 }
 class TestQString: public QObject
 {
Q_OBJECT
public:
TestQString(){
    qInstallMsgHandler(myMessageOutput);
}
private slots:
void toUpper();

};
//! [0]

//! [1]
void TestQString::toUpper()
{
QString str = "Hello";
QCOMPARE(str.toUpper(), QString("HELLO"));
qDebug() << "hello";
std::cout << "Hello, world!\n\n";
}
//! [1]

//! [2]
QTEST_MAIN(TestQString)
#include "testqstring.moc"
//! [2]
4

1 に答える 1

1

QT4 バージョン: 次のように独自の Messagehandler を実装してみてください。

void MessageOutput(QtMsgType type, const char* msg)
{
    //in this function, you can write the message to any stream!
    switch (type) {
      case QtDebugMsg:
        std::cout << msg << ::std::endl;
        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();
    }
}

int main(int argc, char* argv[])
{
qInstallMsgHandler(MessageOutput);

QApplication App(argc, argv);

Testapp Updater;
Updater.doSomething();

return App.exec();
}

すべての DebugMsg は std::cout にリダイレクトされます。

ここでQT5の同じ例

于 2014-07-02T08:20:59.250 に答える