服务端
#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