Qt项目入门

一个简单的项目

该项目涉及tcp服务端客户端通信,数据库操作,Log4Qt日志打印,不过是关于工业与上位机的一个简单项目处理,过程不一定容易理解,附上通讯协议。
Qt5.12, MinGw32位即可运行。
整个项目代码量较少,也就几百到一千行左右,介意的就不要下载。
https://download.csdn.net/download/qq_34183232/85464676

部分代码如下:

#ifndef TCPCLIENTSOCKET_H
#define TCPCLIENTSOCKET_H

#include <QObject>
#include <QtNetwork>
#include <QTcpSocket>

class TcpClientSocket : public QObject
{
    Q_OBJECT
public:
    explicit TcpClientSocket(QObject* parent = nullptr);

    bool connectTcp(QString ip, int portNum);
    void disConnect();
    bool write(QByteArray str);

signals:
    void disConnect_signal();
    void receiveData(QByteArray data);

public slots:

private:

    QTcpSocket* m_socket;
    void receivData();

};

#endif // TCPCLIENTSOCKET_H
#ifndef TCPSERVERSOCKET_H
#define TCPSERVERSOCKET_H

#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
#include <QNetworkInterface>

class TcpServerSocket : public QObject
{
    Q_OBJECT
public:
    explicit TcpServerSocket(QObject* parent = nullptr);

    bool listen(int port);
    void close();
    QList<QHostAddress> getAllAddress()const;
    QString getIpAddress()const;
    void write(QString data);
    void write(QString ip, int port, QString data);

signals:
    void readData_signal(QString);
    void disConnect_signal();
    void newConnectIPportInfo_signal(QString ip, int port);

public slots:
    void newConnect_slot();
    void disConnect_slot();
    void readData_slot();

private:
    QTcpServer* m_server;
    QTcpSocket* m_currentClient;
    QVector<QTcpSocket*> m_tcpClientVec;
};

#endif // TCPSERVERSOCKET_H
#ifndef LOGSERVICE_H
#define LOGSERVICE_H

#include <log4qt/logger.h>
#include <log4qt/ttcclayout.h>
#include <log4qt/patternlayout.h>
#include <log4qt/dailyrollingfileappender.h>
#include <log4qt/loggerrepository.h>
#include <log4qt/logmanager.h>
#include <log4qt/propertyconfigurator.h>
#include <QString>
#include "define.h"

class MyLogger
{
public:
    static MyLogger* instance()
    {
        static MyLogger* loggerIns = nullptr;
        if(!loggerIns)
        {
            loggerIns = new MyLogger();
        }
        return loggerIns;
    }

    MyLogger()
    {
        m_logger = Log4Qt::Logger::rootLogger();
        // 创建一个 TTCCLayout(输出时间、线程、Logger 以及消息内容)
        // layout->setThreadPrinting(false);
        Log4Qt::PatternLayout* layout = new Log4Qt::PatternLayout();
        layout->setConversionPattern("%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n");

        layout->setName("My Layout");
        layout->activateOptions();

        // 创建一个 DailyRollingFileAppender(以指定的频率滚动)
        Log4Qt::DailyRollingFileAppender* appender = new Log4Qt::DailyRollingFileAppender();
        appender->setName("My Appender");
        appender->setLayout(layout);
        appender->setFile(LOG_PATH + "log.txt");
        appender->setImmediateFlush(true);  // 立即刷新
        appender->setThreshold(Log4Qt::Level::NULL_INT);  // 设置阈值级别
        appender->setAppendFile(true);  // 追加的方式

        // 等价于 appender->setDatePattern("'.'yyyy-MM-dd-hh");
        appender->setDatePattern(Log4Qt::DailyRollingFileAppender::HOURLY_ROLLOVER);
        appender->activateOptions();

        // 在 logger 上添加 appender
        m_logger->addAppender(appender);

        // 设置级别
        //m_logger->setLevel(Log4Qt::Level::DEBUG_INT);

        //Log4Qt::LogManager::setHandleQtMessages(true);
    }

    ~MyLogger()
    {
        m_logger->removeAllAppenders();
        m_logger->loggerRepository()->shutdown();
    }

    void debug(const QString& msg)
    {
        m_logger->debug(msg);
    }
    void info(const QString& msg)
    {
        m_logger->info(msg);
    }
    void error(const QString& msg)
    {
        m_logger->error(msg);
    }

    Log4Qt::Logger* m_logger;
};

#endif // LOGSERVICE_H

虽然我是菜鸡,考虑到我要失业了,把仅有的资源弄弄,希望能补贴点钱财。如果写的不好,各位海涵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HelloHypatia

希望自己的总结对大家有所帮助!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值