【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()));
}
相关推荐
散峰而望5 小时前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
冷凝雨5 小时前
复数乘法(C & Simulink)
c语言·开发语言·信号处理·simulink·dsp
CoderCodingNo5 小时前
【GESP】C++五级真题(贪心思想考点) luogu-B4071 [GESP202412 五级] 武器强化
开发语言·c++·算法
0和1的舞者5 小时前
Spring AOP详解(一)
java·开发语言·前端·spring·aop·面向切面
MoonBit月兔6 小时前
年终 Meetup:走进腾讯|AI 原生编程与 Code Agent 实战交流会
大数据·开发语言·人工智能·腾讯云·moonbit
智航GIS6 小时前
8.2 面向对象
开发语言·python
小小星球之旅6 小时前
CompletableFuture学习
java·开发语言·学习
kylezhao20197 小时前
C# 语言基础(变量、数据类型、流程控制、面向对象编程)
开发语言·计算机视觉·c#·visionpro
咯哦哦哦哦7 小时前
WSL + ubantu22.04 + 远程桌面闪退+黑屏闪退解决
linux·开发语言
翩若惊鸿_7 小时前
【无标题】
开发语言·c#