【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()));
}
相关推荐
小成202303202653 小时前
Linux高级02
linux·开发语言
知行合一。。。3 小时前
Python--04--数据容器(总结)
开发语言·python
咸鱼2.04 小时前
【java入门到放弃】需要背诵
java·开发语言
ZK_H4 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
A.A呐4 小时前
【C++第二十九章】IO流
开发语言·c++
椰猫子4 小时前
Java:异常(exception)
java·开发语言
lifewange4 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest
cmpxr_4 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
2401_827499994 小时前
python项目实战09-AI智能伴侣(ai_partner_5-6)
开发语言·python
PD我是你的真爱粉4 小时前
MCP 协议详解:从架构、工作流到 Python 技术栈落地
开发语言·python·架构