【发布时间】:2015-06-30 09:15:29
【问题描述】:
在我的 Qt 应用程序中,我有一个 MainWindow 和一个 DialogWindow。 DialogWindow 用于设置服务器的 IP 地址和端口。而MainWindow则是连接成功后进行通信。
但是,在DialogWindow中设置QTcpSocket *socket意味着当我关闭DialogWindow时,socket将被销毁,因此socket将与服务器断开连接。
我想在DialogWindow 关闭后保持套接字连接到服务器。有没有什么方法可以达到这个效果?
请给我一些关于此的cmets和想法。我是 Qt 的新手。
DialogSetup.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();
}
【问题讨论】:
-
您可以将套接字指针放置在 MainWindow 类中,并通过 DialogSetup 表单与套接字的信号进行通信。
标签: c++ qt sockets qtcpsocket