当前位置: 首页 > news >正文

QT DAY4

1.思维导图

 2.手动完成服务器的实现,并具体程序要注释清楚

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMessageBox>
#include <QList>
#include <QDebug>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QListWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTQPushButton *btn1 = new QPushButton;QLabel *lab = new QLabel;QLabel *lab2 = new QLabel;QLineEdit *edit = new QLineEdit;QListWidget *list=new QListWidget;public:Widget(QWidget *parent = nullptr);~Widget();public slots:void btn1_clicked();void newConnection_slot();  //自定义处理newConnection信号的槽函数void readyRead_slot();  //自定义处理readyRead信号的槽函数private:Ui::Widget *ui;//定义客户端容器QList<QTcpSocket*> socketList;//定义服务器指针QTcpServer *server;};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//给服务器指针实例化空间server = new QTcpServer(this);qDebug()<<this->size();qDebug()<<this->rect().size();qDebug()<<this->geometry().size();qDebug()<<this->frameGeometry().size();qDebug()<<"width:"<<this->width()<<"  height:"<<this->height();qDebug()<<"width:"<<this->size().width()<<"    height:"<<this->size().height();//设定窗口指定大小this->setFixedSize(500,500);//窗口标题qDebug()<<this->windowTitle();  //获取窗口标题this->setWindowTitle("服务器");//设置标签lab=new QLabel(this);lab->resize(500,400);lab->setAlignment(Qt::AlignCenter);  //垂直和水平全部居中//设置EditList窗口,显示运行结果list=new QListWidget(this);list->resize(500,300);//端口号标签lab2=new QLabel(this);lab2->resize(100,50);lab2->setText("端口号:");lab2->move(90,350);//设定端口号edit=new QLineEdit(this);edit->resize(200,50);edit->move(150,350);//设定按钮btn1=new QPushButton(this);btn1->setText("启动服务端");btn1->resize(90,50);btn1->move(85,420);
}Widget::~Widget()
{delete ui;
}
//启动服务器按钮对应的槽函数
void Widget::btn1_clicked()
{//获取端口号quint16 port=edit->text().toUInt();if(server->listen(QHostAddress::Any,port)){QMessageBox::information(this,"","服务器启动成功");}else{QMessageBox::information(this,"","服务器启动失败");}connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}//处理newConnection信号的槽函数的实现
void Widget::newConnection_slot()
{qDebug()<<"有新客户连接";QTcpSocket* s=server->nextPendingConnection();//将套接字放入到客户端容器中socketList.push_back(s);connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}//关于readyRead信号对应槽函数的实现
void Widget::readyRead_slot()
{for(int i=0;i<socketList.count();i++){if(socketList.at(i)->state()==0){//移除客户端socketList.removeAt(i);}}for(int i=0;i<socketList.count();i++){if(socketList.at(i)->bytesAvailable()!=0){QByteArray msg = socketList.at(i)->readAll();//将数据展示到list窗口中list->addItem(QString::fromLocal8Bit(msg));//将数据发送给所有客户端for(int j=0;j<socketList.count();j++){socketList.at(j)->write(msg);}}}
}

http://www.lryc.cn/news/101152.html

相关文章:

  • 最新Ai创作源码ChatGPT商用运营源码/支持GPT4.0+支持ai绘画+支持Mind思维导图生成
  • 一个go的支持多语言的error自动生成插件
  • wireshark抓包新手使用教程(超详细)
  • 平均列顺序对列排斥能的影响
  • 微信小程序-处理ios无法播放语音的问题
  • 区块链 2.0笔记
  • 深入理解Vue响应式系统:数据绑定探索
  • web流程自动化详解
  • 什么是框架?为什么要学框架?
  • 什么是 Sass?
  • Kotlin~Memento备忘录模式
  • 单链表的多语言表达:C++、Java、Python、Go、Rust
  • 微信小程序 background-image直接设置本地图片路径,编辑器正常显示,真机运行不显示解决方法
  • SQLite Studio 连接 SQLite数据库
  • 【业务功能篇58】Springboot + Spring Security 权限管理 【中篇】
  • Docker挂载目录失败问题解决
  • css中隐藏页面中某一个元素有什么方法?
  • Unity 多语言问题C#篇
  • 深度学习和神经网络
  • 在CSDN学Golang云原生(Kubernetes Volume)
  • 第十五章 友元 异常和其他
  • 制作DBC文件
  • 【1.1】Java微服务:初识微服务
  • 数据结构--串、数组、广义表
  • 白银挑战——链表高频面试算法题
  • 海外腾讯云账号:腾讯云高性能计算平台 THPC
  • eclipse 最新版没有navigator视图如何解决
  • Zynq-Linux移植学习笔记之62- PL挂载复旦微flash
  • SpringBoot复习:(2)Tomcat容器是怎么启动的?
  • 1 MobileHomeTopicApplication