【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()));
}
相关推荐
DevilSeagull几秒前
Windows 批处理 (Batch) 编程: 从入门到入土. (一) 基础概念与环境配置
开发语言·windows·后端·batch·语言
AI科技星6 分钟前
全域数学·第卷:场计算机卷(场空间计算机)【乖乖数学】
java·开发语言·人工智能·算法·机器学习·数学建模·数据挖掘
charlie11451419113 分钟前
嵌入式C++实践开发第21篇(单片机实践):按钮输入 —— 硬件原理、消抖与HAL API
开发语言·c++·单片机
前端老石人14 分钟前
前端开发中的 URL 完全指南
开发语言·前端·javascript·css·html
0xDevNull16 分钟前
Java泛型详解
java·开发语言·后端
yeeanna17 分钟前
GO函数的特殊性
开发语言·后端·golang
AI科技星21 分钟前
《全域数学》第三卷:代数原本 · 全书详述【乖乖数学】
开发语言·人工智能·机器学习·数学建模
时空系22 分钟前
第10篇:归属权与借用——Rust的安全保障 Rust中文编程
开发语言·安全·rust
AI进化营-智能译站26 分钟前
ROS2 C++开发系列13-运算符重载让ROS2消息处理更自然
java·开发语言·c++·ai
时空系27 分钟前
第6篇:数据容器——管理大量数据 Rust中文编程
开发语言·后端·rust