gpt4 book ai didi

c++ - 如何让QTcpsocket在关闭DialogWindow后保持连接?

转载 作者:行者123 更新时间:2023-11-28 02:24:45 24 4
gpt4 key购买 nike

在我的 Qt 应用程序中,我有一个 MainWindow 和一个 DialogWindowDialogWindow 用于设置服务器的 IP 地址和端口。而MainWindow是连接成功后进行通信的。

但是,在 DialogWindow 中设置 QTcpSocket *socket 意味着当我关闭 DialogWindow 时,socket 将被销毁,因此 socket 将与服务器断开连接。

我想在 DialogWindow 关闭后保持套接字连接到服务器。有什么方法可以达到这样的效果吗?

请给我一些意见和想法。我是 Qt 的新手。

对话框设置.cpp

DialogSetup::DialogSetup(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogSetup)
{
ui->setupUi(this);

socket = new QTcpSocket(this);
connect(socket, SIGNAL(connected()),this, SLOT(wasconnected()));
connect(socket,SIGNAL(disconnected()),this,SLOT(wasdisconnected()));
}
DialogSetup::~DialogSetup()
{
delete ui;
}

void DialogSetup::on_pushButtonConnect_clicked()
{
m_strIPAdd = ui->lineEditIPAdd->text();
m_strPort = ui->lineEditPort->text().toInt();

socket->connectToHost(m_strIPAdd,m_strPort);

if(!socket->waitForConnected(10000))
{
ui->labelStatus->setText("Error");
QMessageBox::information(this,"Error",socket->errorString());
}
}
void DialogSetup::wasconnected()
{
socket->write("Hello server!");
ui->labelStatus->setText("Connected!");
ui->pushButtonDisconnect->setDisabled(false);
}

void DialogSetup::wasdisconnected()
{
ui->labelStatus->setText("Disonnected!");
}

void DialogSetup::on_pushButtonDisconnect_clicked()
{
socket->close();
}

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_actionSetup_triggered()
{
dialogsetup = new DialogSetup(this);
dialogsetup->show();
}

最佳答案

将套接字移到对话框类之外。类似的东西:

void MainWindow::on_actionSetup_triggered()
{
socket = new QTcpSocket(this); //declared as private in MainWindow
dialogsetup = new DialogSetup(socket, this);
connect(socket,SIGNAL(connected()), dialogsetup, SLOT(wasconnected()));
connect(socket,SIGNAL(disconnected()), dialogsetup ,SLOT(wasdisconnected()));
dialogsetup->show();
}

对话框类存储一个指向套接字的指针并使用它进行操作:

DialogSetup::DialogSetup(QTcpSocket *socket, QWidget *parent) :
QDialog(parent),
socket_(socket),
ui(new Ui::DialogSetup)
{
ui->setupUi(this);
}

DialogSetup::~DialogSetup()
{
delete ui;
}

void DialogSetup::on_pushButtonConnect_clicked()
{
m_strIPAdd = ui->lineEditIPAdd->text();
m_strPort = ui->lineEditPort->text().toInt();

socket_->connectToHost(m_strIPAdd,m_strPort);

if(!socket_->waitForConnected(10000))
{
ui->labelStatus->setText("Error");
QMessageBox::information(this,"Error",socket->errorString());
}
}
void DialogSetup::wasconnected()
{
socket_->write("Hello server!");
ui->labelStatus->setText("Connected!");
ui->pushButtonDisconnect->setDisabled(false);
}

void DialogSetup::wasdisconnected()
{
ui->labelStatus->setText("Disonnected!");
}

void DialogSetup::on_pushButtonDisconnect_clicked()
{
socket_->close();
}

关于c++ - 如何让QTcpsocket在关闭DialogWindow后保持连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com