QT开发中文网

请给出完整示例

当然,以下是一个完整的示例,演示了如何在Qt中使用spdlog并将日志输出到界面上。

首先,确保你的Qt项目中包含了spdlog库,并正确引入头文件。

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPlainTextEdit>
#include <memory>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void onLogButtonClicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <spdlog/spdlog.h>
#include <spdlog/sinks/base_sink.h>

class QtLogSink : public spdlog::sinks::base_sink<std::mutex>
{
public:
    explicit QtLogSink(QPlainTextEdit* logWidget) : logWidget_(logWidget) {}

protected:
    void sink_it_(const spdlog::details::log_msg& msg) override
    {
        std::lock_guard<std::mutex> lock(mutex_);
        QString logMessage = QString::fromStdString(msg.payload.data());
        QMetaObject::invokeMethod(logWidget_, [this, logMessage]() {
            logWidget_->appendPlainText(logMessage);
        });
    }

private:
    QPlainTextEdit* logWidget_;
};

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

    // 初始化console logger
    auto console_sink = std::make_shared<QtLogSink>(ui->plainTextEdit);
    auto console_logger = std::make_shared<spdlog::logger>("console", console_sink);

    // 将console logger设为全局默认logger
    spdlog::set_default_logger(console_logger);

    // 打印示例日志消息
    SPDLOG_LOGGER_INFO(spdlog::get("console"), "Hello, spdlog!");

    connect(ui->logButton, &QPushButton::clicked, this, &MainWindow::onLogButtonClicked);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onLogButtonClicked()
{
    // 从文本框获取日志消息并打印
    QString logMessage = ui->lineEdit->text();
    SPDLOG_LOGGER_INFO(spdlog::get("console"), logMessage.toStdString());
}

mainwindow.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Qt+spdlog Demo</string>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item alignment="Qt::AlignHCenter|Qt::AlignTop">
     <layout class="QHBoxLayout" name="horizontalLayout_2">
      <item alignment="Qt::AlignRight|Qt::AlignTop">
       <label name="label_2">
        <text>Log Message:</text>
       </label>
      </item>
      <item alignment="Qt::AlignLeft|Qt::AlignTop">
       <lineEdit name="lineEdit"/>
      </item>
     </layout>
    </item>
    <item alignment="Qt::AlignHCenter|Qt::AlignTop">
     <widget class="QPlainTextEdit" name="plainTextEdit"/>
    </item>
    <item alignment="Qt::AlignHCenter|Qt::AlignTop">
     <layout class="QHBoxLayout" name="horizontalLayout">
      <property name="leftMargin">
       <number>50</number>
      </property>
      <property name="topMargin">
       <number>20</number>
      </property>
      <item alignment="Qt::AlignRight|Qt::AlignVCenter">
       <pushButton name="logButton">
        <text>Log</text>
       </pushButton>
      </item>
     </layout>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect/>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
  <action name="actionOpen"/>
  <action name="actionSave"/>
  <action name="actionQuit"/>
  <add actionName="actionQuit"/>
  <add actionName=""/>
  <add actionName=""/>
 </widget>
</ui>

main.cpp:

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

以上是一个简单的示例,包含了一个主窗口,其中有一个文本框和一个按钮。当用户点击按钮时,日志消息将从文本框中获取并打印到日志窗口(QPlainTextEdit)上。你可以根据需要对界面进行进一步的定制和扩展。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=8672

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?