В моем приложении Qt у меня есть MainWindow
и DialogWindow
. DialogWindow
предназначен для настройки IP-адреса и порта сервера. Пока MainWindow
предназначен для осуществления связи после успешного соединения.Как отключить QTcpsocket после закрытия DialogWindow?
Однако создание QTcpSocket *socket
в DialogWindow
означает, что, когда я закрыть DialogWindow
, то socket
будет разрушен, таким образом, socket
будет разъединен с сервером.
Я хочу, чтобы розетка подключалась к серверу после закрытия DialogWindow
. Существуют ли какие-либо методы, которые могут достичь этого результата?
Просьба дать мне несколько комментариев и идей по этому вопросу. Я довольно новичок в 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();
}
mainwindow.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 и взаимодействуете с сигналами сокета throuhg DialogSetup формы. –