QT--QtcpServe

服务端

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    server = new QTcpServer(this);\
    connect(server, &QTcpServer::newConnection, this, &Widget::newConnect_slot);
}

Widget::~Widget()
{
    delete ui;
}
void Widget::on_startBut_clicked()
{
    quint16 port = ui->portEdit->text().toUInt();

    if(server->listen(QHostAddress::Any, port))
    {
        QMessageBox::information(this, "成功", "服务器启动成功");
    }else
    {
        QMessageBox::information(this, "失败", "监听失败");
    }
}

void Widget::newConnect_slot()
{
    qDebug()<<"有客户端连接请求";
    QTcpSocket *s = server->nextPendingConnection();

    clientList.push_back(s);
    connect(s, &QTcpSocket::readyRead, this, &Widget::readRead_slot);
}

void Widget::readRead_slot()
{
    qDebug()<<"有客户端发送消息了";

    for(int i = 0 ; i < clientList.size(); i++)
    {
        if(clientList[i]->state() == 0)
        {
            clientList.removeAt(i);
        }
    }
    for(int i = 0; i < clientList.size(); i++)
    {
        if(clientList[i]->bytesAvailable() != 0)
        {
            QByteArray msg = clientList[i]->readAll();

            ui->msgWidget->addItem(QString::fromLocal8Bit(msg));

            for(int j = 0; j < clientList.size(); j++)
            {
                clientList[j]->write(msg);
            }
        }
    }
}

时钟源文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    lab12 = new QLabel(this);
    lab12->setText("12");
    lab12->setFont(QFont("楷体",25,3));
    lab12->move(this->width()/2-20,this->height()/2-175);

    lab3 = new QLabel(this);
    lab3->setText("3");
    lab3->setFont(QFont("楷体",25,3));
    lab3->move(this->width()/2+150,this->height()/2-20);

    lab6 = new QLabel(this);
    lab6->setText("6");
    lab6->setFont(QFont("楷体",25,3));
    lab6->move(this->width()/2-10,this->height()/2+135);

    lab9 = new QLabel(this);
    lab9->setText("9");
    lab9->setFont(QFont("楷体",25,3));
    lab9->move(this->width()/2-160,this->height()/2-20);

    time_id = startTimer(1000);
}

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

void Widget::paintEvent(QPaintEvent *event)
{
    //获取系统时间
    QTime sys_t = QTime::currentTime();
    int hour = sys_t.hour();
    int minute = sys_t.minute();
    int second = sys_t.second();
    //分刻度绘制
    QPainter painterMinute(this);
    QPen penMinute;
    penMinute.setStyle(Qt::SolidLine);
    penMinute.setWidth(5);
    painterMinute.setPen(penMinute);
    painterMinute.translate(this->width()/2,this->height()/2);
    painterMinute.drawEllipse(QPoint(0,0),200,200);
    for(int i = 0;i < 12;i++){
        painterMinute.drawLine(0,-200,0,-180);
        painterMinute.rotate(360/12);
    }
    //秒钟刻度绘制
    QPainter painterSecond(this);
    QPen penSecond;
    penSecond.setStyle(Qt::SolidLine);
    penSecond.setWidth(3);
    painterSecond.setPen(penSecond);
    painterSecond.translate(this->width()/2,this->height()/2);
    for(int i = 0;i < 60;i++){
        painterSecond.drawLine(0,-200,0,-190);
        painterSecond.rotate(360/60);
    }
    //时针绘制
    QPainter painterHourPoint(this);
    QPen penHourPoint;
    penHourPoint.setStyle(Qt::SolidLine);
    penHourPoint.setWidth(5);
    painterHourPoint.setPen(penHourPoint);
    painterHourPoint.translate(this->width()/2,this->height()/2);
    painterHourPoint.rotate((360/12)*(hour%12+minute/60+second/3600));
    painterHourPoint.drawLine(0,10,0,-50);
    //分针绘制
    QPainter painterMinutePoint(this);
    QPen penMinutePoint;
    penMinutePoint.setStyle(Qt::SolidLine);
    penMinutePoint.setWidth(4);
    painterMinutePoint.setPen(penMinutePoint);
    painterMinutePoint.translate(this->width()/2,this->height()/2);
    painterMinutePoint.rotate((360/60)*(minute+second/60));
    painterMinutePoint.drawLine(0,10,0,-150);
    //秒针绘制
    QPainter painterSecondPoint(this);
    QPen penSecondPoint;
    penSecondPoint.setStyle(Qt::SolidLine);
    penSecondPoint.setWidth(2);
    painterSecondPoint.setPen(penSecondPoint);
    painterSecondPoint.translate(this->width()/2,this->height()/2);
    painterSecondPoint.rotate((360/60)*second);
    painterSecondPoint.drawLine(0,10,0,-150);
}

void Widget::timerEvent(QTimerEvent *event)
{
    if(time_id == event->timerId()){
        this->update();
    }
}

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QDateTime>
#include <QLabel>
#include <QTimer>
#include <QDebug>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *event) override;

    void timerEvent(QTimerEvent *event) override;

private:
    Ui::Widget *ui;

    QLabel *lab12;
    QLabel *lab3;
    QLabel *lab6;
    QLabel *lab9;

    int time_id;

};
#endif // WIDGET_H

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值