CodeLibrary/04_QtCreator_Cplus_TCPClient_20240423/widget.cpp
2024-04-24 23:08:17 +08:00

66 lines
1.9 KiB
C++

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 设置默认地址和端口
ui->IP_Edit->setText(default_target_ip);
ui->Port_Edit->setText(default_target_port);
// 初始化 socket 类
socket = new QTcpSocket;
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_ConnectButton_clicked()
{
// 获取用户输入的 IP 地址和端口号
QString target_ip = ui->IP_Edit->text();
QString target_port= ui->Port_Edit->text();
// 提示用户开始连接服务器
ui->Message_Edit->clear();
ui->Message_Edit->insertPlainText("connect to " + target_ip + ":" + target_port + " ...\n");
// 连接服务器
// QHostAddress(target_ip) -> 将 QString 类型转换为 QHostAddress 类型
// target_port.toUShort() -> 将 QString 类型转换为 quint16 类型
socket->connectToHost(QHostAddress(target_ip), target_port.toUShort());
// 判断服务器是否连接成功
// 如果连接成功, socket 对象会发出一个信号
connect(socket, &QTcpSocket::connected, [this](){
// 连接成功后输出用户提示
ui->Message_Edit->insertPlainText("Message: connected!\n");
// 隐藏当前窗口
this->hide();
// 实例化目标窗口对象
cheat *target_window = new cheat(socket);
// 调用 show() 方法显示窗口
target_window->show();
});
// 连接异常
// 当连接状态异常, 例如断开连接, socket 对象也会发出一个信号
// &QTcpSocket::disconnect -> 连接断开信号
connect(socket, &QTcpSocket::disconnected, [this](){
// 提示用户连接断开
ui->Message_Edit->insertPlainText("Message: disconnect!\n");
});
}
// 清除信息区显示内容
void Widget::on_ClearButton_clicked()
{
ui->Message_Edit->clear();
}