2024.9.11 作业

绘制组件制作时钟

代码:

/*******************************************/

文件名:widget.h

/*******************************************/

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPaintEvent>
#include <QtDebug>
#include <QPainter>
#include <QColor>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>
#include <QPalette>
#include <QMouseEvent>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();//重写事件处理函数void paintEvent(QPaintEvent *event) override;void timerEvent(QTimerEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;private:Ui::Widget *ui;int t_id;int hh=0,mm=0,ss=0;//定义Qpoint类记录鼠标起始点QPoint startPoint;
};
#endif // WIDGET_H

/*******************************************/

文件名:widget.cpp

/*******************************************/

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);t_id = this->startTimer(1000);setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏setAttribute(Qt::WA_TranslucentBackground, true);//设置窗口背景透明
}Widget::~Widget()
{delete ui;
}//定义绘制事件处理函数
void Widget::paintEvent(QPaintEvent *event)
{//实例化一个画家类QPainter p1(this);//给画家类设置画笔p1.setPen(QColor("skyblue"));//给画家设置字体p1.setFont(QFont("华文隶书"));//设置画家坐标起点p1.translate(this->width()/2, this->height()/2);//绘制矢量文字//p1.drawText(this->width()/2, this->height()/2, "hello world");p1.setBrush(QBrush(QColor(213,248,253)));//画圆形p1.drawEllipse(QPointF(0,0),200,200);//画时刻表p1.setPen(QColor(255,0,0));for(int i = 0; i < 60; i ++){p1.drawLine(200,0, 190,0);p1.rotate(6);}//画小时格子QPen pen;pen.setWidth(3);p1.setPen(pen);for(int i = 1; i<= 12; i ++){p1.rotate(30);p1.drawLine(0,-200, 0,-185);p1.drawText(0,-170, QString("%1").arg((i)));}QPainter p2(this);p2.setPen(QColor(38,251,235));p2.translate(this->width()/2, this->height()/2);p2.rotate(-90);QPen pen2;pen2.setWidth(3);p2.setPen(pen2);//绘制秒针:p2.rotate(ss*6);p2.drawLine(0,0, 160,0);//绘制分针:p2.rotate(-ss*6);p2.rotate(mm*6+ss*6/60);p2.drawLine(0,0, 120,0);//绘制时针:p2.rotate(-mm*6-ss*6/60);p2.rotate(hh*30+mm*6/12+ss*6/60/12);p2.drawLine(0,0, 100,0);
}void Widget::timerEvent(QTimerEvent *event)
{if(event->timerId() == t_id){QDateTime NowTime = QDateTime::currentDateTime();QString NowTimeString = NowTime.toString("hh:mm:ss");QStringList list = NowTimeString.split(":");hh = list[0].toUInt();mm = list[1].toUInt();ss = list[2].toUInt();update();}
}void Widget::mousePressEvent(QMouseEvent *event)
{startPoint = event->globalPos() - this->frameGeometry().topLeft();
}void Widget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - startPoint);
}

/*******************************************/

文件名:main.cpp

/*******************************************/

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[]) {QApplication app(argc, argv);Widget widget;widget.show();return app.exec();
}

结果:

网络聊天室

代码:

 /*******************************************/

文件名:widget.h

/*******************************************/

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTcpServer>//tcp服务器类
#include<QTcpSocket>//tcp客户端类
#include<QList>//链表类
#include<QMessageBox>//消息对话框类
#include<QDebug>//消息调试类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startSerBtn_clicked();void newConnection_slot();void readyRead_slot();
private:Ui::Widget *ui;QTcpServer *server;//定义服务器指针QList<QTcpSocket *>socketList;
};
#endif // WIDGET_H

/*******************************************/

文件名:widget.cpp

/*******************************************/

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//实例化一个服务器对象server=new QTcpServer(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_startSerBtn_clicked()
{if(ui->startSerBtn->text()=="启动服务器"){//启动服务器的动作//获取ui界面上的端口号quint16 port=ui->portEdit->text().toUInt();//启动监听:bool listen(const QHostAddress &address::Any,quint16 port=0);//参数1:要监听的ip地址,如果写Any,表示监听该主机上的所有网络接口//参数2:要监听的端口号,如果不指定,则系统默认给绑定一个随机端口号//返回值:成功监听返回真,失败返回假if(!server->listen(QHostAddress::Any,port)){QMessageBox::critical(this,"错误","服务器启动失败");return ;}QMessageBox::information(this,"成功","启动服务器成功");//将行编辑器设置为不可用ui->portEdit->setEnabled(false);//将按钮文本内容设置为关闭服务器ui->startSerBtn->setText("关闭服务器");//此时,如果客户端发来连接请求,服务器自动发射一个newConnection信号connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);}else{//执行关闭服务器的动作server->close();//将行编辑器设置为可用状态ui->portEdit->setEnabled(true);//将按钮文本内容设置为打开服务器ui->startSerBtn->setText("打开服务器");}
}
void Widget::newConnection_slot()
{qDebug()<<"有新的客户端发来请求";//可以通过成员函数nextPendingConnection函数获取最新连接的客户端套接字地址//函数原型QTcpSocket *nextPendingConnection();//无参函数//返回值:最新的一个连接的套接字地址QTcpSocket * s = server->nextPendingConnection();//将改套接字放入客户端链表中socketList.push_back(s);//有客户端发来数据,客户端会自动发送readyRead信号//可以将该信号连接到自定义的槽函数中处理相关逻辑connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}
//自定义处理readyRead信号的槽函数的实现
void Widget::readyRead_slot()
{//遍历客户端中的所有客户端,如果客户端的状态为未连接,则直接移除for(int i=0;i<socketList.size();i++){//判断当前套接字是否失效//函数原型:SocketState atate() const;//功能:返回套接字当前状态//返回结果为0时,表示该套接字是未连接状态if(socketList[i]->state()==0){//将该套接字移除链表socketList.removeAt(i);}}//遍历所有客户端,判断是否有数据可读for(int i=0;i<socketList.count();i++){//函数原型:qint64 bytesAvailable()const override;//参数无//返回值:返回当前客户端套接字中的待读数据,如果没有数据,返回0if(socketList[i]->bytesAvailable()!=0){//读取当前套接字上的内容QByteArray msg=socketList[i]->readAll();//将接收到的消息展示到ui界面上ui->msglistWidget->addItem(QString::fromLocal8Bit(msg));//将收到的消息,全部发给其他客户端for(int j=0; j<socketList.length(); j++){if(i!=j)          //防止自己发给自己{socketList[j]->write(msg);}}}}
}

/*******************************************/

文件名:main.cpp

/*******************************************/

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

 /*******************************************/

文件名:widget.h

/*******************************************/

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTcpSocket>
#include<QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_connectBtn_clicked();void connected_slot();void readyRead_slot();           //自定义处理readyRead信号的槽函数void on_sendBtn_clicked();void on_disconnectBtn_clicked();void disconnected_slot();private:Ui::Widget *ui;//定义通信用的变量QTcpSocket *client;//定义套接字指针QString username;//用户名
};
#endif // WIDGET_H

/*******************************************/

文件名:widget.cpp

/*******************************************/

#include "widget.h"
#include "ui_widget.h"
#include<QListWidgetItem>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//实例化客户端对象client=new QTcpSocket(this);connect(client, &QTcpSocket::connected, this, &Widget::connected_slot);connect(client, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);connect(client,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
}Widget::~Widget()
{delete ui;
}//自定义处理readyRead信号的槽函数
void Widget::readyRead_slot()
{//从套接字中读取数据QByteArray msg = client->readAll();//将读取下来的数据展示到ui界面上ui->msgListWidget->addItem( QString::fromLocal8Bit(msg) );
}//连接服务器按钮对应的槽函数
void Widget::on_connectBtn_clicked()
{//获取ui界面上的数据QString ip=ui->ipedit->text();//ip地址quint16 port=ui->portedit->text().toUInt();//端口号username=ui->nameedit->text();//调用套接字成员函数,连接服务器//函数原型:void connectToHost(const QHostAddress &address,quint16 port,OpenMode mode=ReadWrite);//参数1:要被连接的服务器ip地址//参数2:服务器的端口号//参数3:默认为可读可写client->connectToHost(ip,port);}
void Widget::connected_slot()
{QMessageBox::information(this,"成功","连接成功");//将相关组件禁用ui->ipedit->setEnabled(false);ui->nameedit->setEnabled(false);ui->portedit->setEnabled(false);ui->connectBtn->setEnabled(false);//向服务器发送一条消息QString msg=username+":进入聊天室";client->write(msg.toLocal8Bit());
}void Widget::on_sendBtn_clicked()
{//组织要发送的消息QString msg=username+":"+ui->msgedit->text();//将消息发送给服务器client->write(msg.toLocal8Bit());QListWidgetItem *item=new QListWidgetItem(msg);item->setTextAlignment(Qt::AlignRight);ui->msgListWidget->addItem(item);ui->msgedit->clear();
}void Widget::on_disconnectBtn_clicked()
{QString msg=username+":离开聊天室";client->write(msg.toLocal8Bit());//断开连接client->disconnectFromHost();
}
void Widget::disconnected_slot()
{QMessageBox::information(this,"提示","成功断开与服务器的连接");ui->ipedit->setEnabled(true);ui->nameedit->setEnabled(true);ui->portedit->setEnabled(true);ui->connectBtn->setEnabled(true);
}

/*******************************************/

文件名:main.cpp

/*******************************************/

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

结果:

没有结果,代码对过了没问题,但是没法连接服务器

思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421859.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAX3483ESA+T具有±15kV ESD保护的+3.3V、低功耗收发器,适用于RS-485和RS-422通信

MAX3483ESAT具有15kV ESD保护的3.3V、低功耗收发器&#xff0c;适用于RS-485和RS-422通信。每个器件包含一个驱动器和一个接收器。MAX3483ESAT具有限摆率驱动器&#xff0c;可充分降低EMI并减少因电缆端接不当引起的反射&#xff0c;从而实现数据速率高达250kbps的无误差数据传…

【中间件】-容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么&#xff1f; K8s的架构原理 控制平面(Control plane) kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager 小结 节点组件(Node) container runtime Pod kubelet ku…

AnyChart 数据可视化框架

AnyChart 数据可视化框架 AnyChart 是一个灵活的 JavaScript&#xff08;HTML5、SVG、VML&#xff09;图表框架&#xff0c;适合任何需要数据可视化的解决方案。 目录 下载并安装开始插件将 AnyChart 与 TypeScript 结合使用将 AnyChart 与 ECMAScript 6 结合使用技术集成贡献…

Anolis OS 7.9(龙蜥操作系统)上Oracle12C Release 2 (12.2)打补丁

本文的oracle使用的是单实例环境 一、打补丁前环境准备 1、确保make, ar, ld,和 nm四个可执行命令在$PATH中 export PATH$PATH:/bin2、查看已装的Oracle的OPatch版本 #切换到oracle用户 su - oracle#进入到数据库的安装目录下的opatch目录 cd /ora01/app/oracle/product/12…

JS_函数声明

JS中的方法,多称为函数,函数的声明语法和JAVA中有较大区别 函数说明 函数没有权限控制符不用声明函数的返回值类型,需要返回在函数体中直接return即可,也无需void关键字参数列表中,无需数据类型调用函数时,实参和形参的个数可以不一致声明函数时需要用function关键字函数没有…

github actions CICD简单使用案例

参考&#xff1a; https://developer.aliyun.com/article/1540773 https://github.com/ViggoZ/producthunt-daily-hot/blob/main/.github/workflows/generate_markdown.yml 1、创建github项目 目录&#xff1a; .github/workflows/fetch-news.yml actions执行yaml&#xff08;…

C语言 | Leetcode C语言题解之第397题整数替换

题目&#xff1a; 题解&#xff1a; //第一种动态规划:超时 // class Solution { // public: // int integerReplacement(int n) { // vector<int>dp(n1,0); // dp[1]0; // for(int i2;i<n;i){ // if(i%20){ // …

Vue接入高德地图并实现基本的路线规划功能

目录 一、申请密钥 二、安装依赖 三、代码实现 四、运行截图 五、官方文档 一、申请密钥 登录高德开放平台&#xff0c;点击我的应用&#xff0c;先添加新应用&#xff0c;然后再添加Key。 如图所示填写对应的信息&#xff0c;系统就会自动生成。 二、安装依赖 npm i am…

学生签到系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;签到信息管理&#xff0c;学生签到管理&#xff0c;班课信息管理&#xff0c;加入班课管理&#xff0c;课程信息管理 微信端账号功能包括&#xff1a;系统首…

C++(三)----内存管理

1.C/C内存分布 看下面这个问题&#xff08;考考你们之前学的咋样&#xff09;&#xff1a; int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pCh…

JDK 安装及配置教程(Windows)【安装】

文章目录 一、 下载1. 官网下载2. 其它渠道 二、 安装三、 配置四、 验证五、 双 JDK 环境 软件 / 环境安装及配置目录 一、 下载 1. 官网下载 安装地址&#xff1a;https://www.oracle.com/ 打开浏览器输入网址 https://www.oracle.com/index.html&#xff0c;进入 Oracle …

Python——turtle库(海龟绘图)介绍与使用

一、概述 在 Python 中&#xff0c;海龟绘图提供了一个实体“海龟”形象&#xff08;带有画笔的小机器动物&#xff09;&#xff0c;假定它在地板上平铺的纸张上画线。 二、运行环境 本文运行环境&#xff1a;Windows11&#xff0c;Python3.11&#xff0c;Pycharm2023.1.4 使…

哈佛斯坦福大学团队联合发布病理基础模型CHIEF,全面提升癌症诊断的准确性|顶刊精析·24-09-12

小罗碎碎念 今日顶刊&#xff1a;Nature 今天精读的这篇文章于24-09-04发表于Nature&#xff0c;作者来自哈佛大学、斯坦福大学。 作者角色作者姓名单位名称&#xff08;英文&#xff09;单位名称&#xff08;中文&#xff09;第一作者Xiyue WangDepartment of Biomedical Info…

如何快速清理Docker中的停止容器?

如何快速清理Docker中的停止容器? 方法一:使用`docker container prune`方法二:结合`docker ps`和`docker rm`注意(这些命令慎用,确定容器不需要之后再执行)💖The Begin💖点点关注,收藏不迷路💖 Docker容器在停止后可能会占用不必要的磁盘空间。如何清理这些停止的…

k8s以及prometheus

#生成控制器文件并建立控制器 [rootk8s-master ~]# kubectl create deployment bwmis --image timinglee/myapp:v1 --replicas 2 --dry-runclient -o yaml > bwmis.yaml [rootk8s-master ~]# kubectl expose deployment bwmis --port 80 --target-port 80 --dry-runclient…

第 9 章图像分割

图像分割是将一幅图像分割成有意义区域的过程。区域可以是图像的前景与背景或图像中一些单独的对象。这些区域可以利用一些诸如颜色、边界或近邻相似性等特征进行构建。本章中&#xff0c;我们将看到一些不同的分割技术。 9.1 图割&#xff08;Graph Cut&#xff09; 图论中的…

Hive中的分区表与分桶表详解

目录 分区表和分桶表 分区表 分区表基本语法 1. 创建分区表 2. 分区表读写数据 1&#xff09;写数据 &#xff08;1&#xff09;LOAD &#xff08;2&#xff09;INSERT 2&#xff09;读数据 3. 分区表基本操作 1&#xff09;查看所有分区信息 2&#xff09;增加分区 …

iOS 知识点记录

王巍 博客地址&#xff1a;OneVs Den git地址&#xff1a;onevcat (Wei Wang) GitHub 江湖人称喵神&#xff0c;目前就职于line。喵神的博客涉及方面比较广, 有Obejctive-C, Swift, SwiftUI, Unity等等。博客内容很有深度&#xff0c;非常值得关注。 戴铭 博客地址&#xff1…

ctf.show靶场ssrf攻略

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 web351 解析:post传入url参数他就会访问。 解法: hackbar传入url参数写入https://127.0.0.1/flag.php web352 解析:post传入url参数&#xff0c;不能是127.0.0.1和localhost 解法:缩写127.1传入 web353 解析…

数据分析与挖掘课程相关资源

这是在gitee上整的关于这门课的一个开源项目。 https://gitee.com/rainpet/python-data-analysis-and-mining-demo 头歌平台。 常见问题&#xff1a; 1、如何确认conda的版本&#xff0c;执行如下命令&#xff1a; conda list anaconda$2、实验室登陆后&#xff0c;无法上网&a…