【Qt】启动新窗口--C/S传输信息

创建新UI文件:界面文件右键单击--创建新文件

在这创建了chat.ui后自动创建chat.h(包含一个Chat类)&chat.cpp

在需要出现这个新界面的地方:

  • 创建Chat类对象【注意:在堆空间创建,局部变量在函数结束就析构了】
  • 展示界面

(这里是widget.cpp中连接connect处理槽函数lambda里加的)

cpp 复制代码
this->hide();//隐藏当前界面
//启动新界面
Chat *c = new Chat(socket);
c->show();

传输信息

接着上次的系统做传输信息:

https://blog.csdn.net/l203018/article/details/153751450?fromshare=blogdetail&sharetype=blogdetail&sharerId=153751450&sharerefer=PC&sharesource=L203018&sharefrom=from_link

客户端

首先在widget.h和widget.cpp中包含chat.h

widget.cpp的连接connect槽函数中包含创建新界面的代码。

因为要传输数据,可以将数据写到socket中new Char(socket)

chat.h

在Chat的声明中加入socket用于传信息

默认参数只能放在后面,前面一个默认参数,后面都得是默认

cpp 复制代码
explicit Chat(QTcpSocket *s,QWidget *parent = nullptr);

并且包含一个socket指针

cpp 复制代码
 QTcpSocket *socket;

chat.cpp

写数据,将lineEdit中写入的东西存到ba中,然后写入socket

cpp 复制代码
void Chat::on_sentButton_clicked()
{
    QByteArray ba;
    ba.append(ui->lineEdit->text().toUtf8());
    socket->write(ba);
}

服务器

widget.h

槽函数中加处理接收客户端消息的函数

cpp 复制代码
void clientInfoSlot();//接收客户端消息

widget.cpp

服务器收到客户端发送的消息 ,socket发出readyReady信号

cpp 复制代码
    connect(socket,&QTcpSocket::readyRead,this,&Widget::clientInfoSlot);

clientInfoSlot的定义:

cpp 复制代码
void Widget::clientInfoSlot()
{
    //获取信号的发出者
    QTcpSocket*s = (QTcpSocket*)sender();
    ui->lineEdit->setText(QString(s->readAll()));
}
相关推荐
2601_966949656 分钟前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
我命由我1234534 分钟前
人脸识别 - 去重时间窗口
java·开发语言·python·学习·java-ee·学习方法·python3.11
落魄大学生之流水线上谋生计1 小时前
Java并发核心机制详解:线程池、CAS、AQS、锁升级
java·开发语言·数据库
hahaha60161 小时前
HLS高层次综合设计技巧--数组
开发语言·嵌入式硬件·算法·fpga开发
佳児素花痴╮1 小时前
Qt速通2
开发语言·qt
“AI国潮设计-小江”2 小时前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁英歌舞猫IP & 创意甜品设计(附ComfyUI工作流与商业授权说明)
开发语言·人工智能·python·prompt·aigc
529宝宝起名网2 小时前
用 Python 分析汉字字源与起名用字的关联规律:从六书结构到文化寓意的起名偏好洞察
开发语言·python
linx2952 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
心态还需努力呀2 小时前
把 Flameshot 编译进鸿蒙 PC:一次 Qt C++ 截图工具的源码级移植实战
c++·qt·harmonyos
白色的北极熊3 小时前
c语言 输出菱形字符串
c语言·开发语言