C++/QT 生成Log文件

该代码示例展示了如何在C++项目中利用Qt框架自定义消息处理器qInstallMessageHandler来记录调试信息到Log.txt文件。程序根据不同消息类型(如Debug,Warning,Critical,Fatal)添加前缀,并包含时间戳、文件名、行号和函数名等详细信息。
摘要由CSDN通过智能技术生成

C++/Qt生成Log.txt文件,使用Qt封装的回调函数qInstallMessageHandler

//**具体实现**
#ifndef MYMESSAGEOUTPUT_HPP
#define MYMESSAGEOUTPUT_HPP
#include <QtWidgets/QApplication>
#include  < QtDebug >
#include  < QFile >
#include  < QTextStream >
#include <QDateTime>
void myMessageOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
    QByteArray localMsg = msg.toLocal8Bit();
    QString strMsg("");
    switch (type)
    {
    case QtDebugMsg:
        strMsg = QString("Debug:");
        break;
    case QtWarningMsg:
        strMsg = QString("Warning:");
        break;
    case QtCriticalMsg:
        strMsg = QString("Critical:");
        break;
    case QtFatalMsg:
        strMsg = QString("Fatal:");
        break;
    }
    // 设置输出信息格式
    QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
    //保存信息:类型、消息、文件、行数、函数
    QString strMessage = QString("Type:%1  Message:%2  File:%3  Line:%4  Function:%5  DateTime:%6")
        .arg(strMsg.toLatin1().constData()).arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function).arg(strDateTime);

    // 输出信息至文件中(读写、追加形式)
    QFile file("Log.txt");
    file.open(QIODevice::ReadWrite | QIODevice::Append);
    QTextStream stream(&file);
    stream << strMessage << "\r\n";
    file.flush();
    file.close();
}


//**main函数调用**
int main(int argc, char *argv[])
{

	qInstallMessageHandler(myMessageOutput);// 日志文件
    QApplication a(argc, argv);

	a.exec();
	return 0;
}
#endif // !MYMESSAGEOUTPUT_HPP
好的,请先确认一下你的Qt版本,因为Qt Quick中的地图组件在Qt 5.6及以上版本才被支持。 下面是一个简单的示例,其中使用C++生成一组随机坐标点,并将它们传递到QML中。QML在地图上使用这些点绘制线段。 main.cpp: ```c++ #include <QtGui/QGuiApplication> #include <QtQml/QQmlApplicationEngine> #include <QtLocation/QGeoCoordinate> #include <QtCore/QList> #include <QtCore/QRandomGenerator> class MapDataObject : public QObject { Q_OBJECT Q_PROPERTY(QVariantList pointsList READ pointsList NOTIFY pointsListChanged) public: MapDataObject(QObject *parent = nullptr) : QObject(parent) { generatePoints(); // 生成随机坐标点 } QVariantList pointsList() const { return m_pointsList; } public slots: // 添加新的坐标点 void addPoint() { QGeoCoordinate newPoint(QRandomGenerator::global()->bounded(-90.0, 90.0), QRandomGenerator::global()->bounded(-180.0, 180.0)); m_pointsList.append(newPoint.toString()); emit pointsListChanged(); } signals: void pointsListChanged(); private: QVariantList m_pointsList; // 生成随机坐标点 void generatePoints() { for (int i = 0; i < 10; ++i) { QGeoCoordinate newPoint(QRandomGenerator::global()->bounded(-90.0, 90.0), QRandomGenerator::global()->bounded(-180.0, 180.0)); m_pointsList.append(newPoint.toString()); } } }; int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); qmlRegisterType<MapDataObject>("com.example.MapDataObject", 1, 0, "MapDataObject"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } #include "main.moc" ``` 在上面的代码中,我们创建了一个MapDataObject类,它继承自QObject,并在QML中注册为一个类型。我们通过Q_PROPERTY将pointsList暴露给QML,并通过Q_INVOKABLE将addPoint方法暴露给QML。 接下来是QML文件: main.qml: ```qml import QtQuick 2.6 import QtQuick.Controls 2.0 import QtPositioning 5.6 import QtLocation 5.6 import com.example.MapDataObject 1.0 ApplicationWindow { visible: true width: 800 height: 600 Map { id: map anchors.fill: parent // 绘制坐标点之间的线段 MapPolyline { line.color: 'red' line.width: 3 line.capStyle: Qt.RoundCap line.joinStyle: Qt.RoundJoin line.opacity: 0.7 line.path: map.toCoordinate(Qt.pointMappedToItem(map, Qt.point(0, 0))) + pointsList.map(function (point) { return map.toCoordinate(Qt.pointMappedToItem(map, Qt.point(0, 0)), point) }) } } Button { text: "Add Point" anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter onClicked: mapData.addPoint() } MapDataObject { id: mapData onPointsListChanged: { console.log("Points changed:", pointsList) } } } ``` 在上面的代码中,我们创建了一个Map组件,并在其内部绘制坐标点之间的线段。我们还创建了一个按钮,用于在地图上添加新的点。我们通过MapDataObject将我们创建的MapDataObject类暴露给QML,并在其onPointsListChanged信号上打印日志。 现在编译并运行代码,您应该可以在地图上看到一些随机的坐标点,并且每次单击“Add Point”按钮时,都会添加一个新的坐标点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值