Я знаю, что был задан похожий вопрос, но я не нашел ответа, который решает мою проблему.
Я адаптирую некоторый существующий код Qt, чтобы добавить функциональность сервера в программу, которую использует моя компания,Для этого я добавил объект QTcpServer в существующее диалоговое окно, вызвал listen () и подключил слот к источнику newConnection, например:
.h
class QConsole : public QDialog
{
Q_OBJECT
public:
void init();
public slots:
void new_Connection();
private:
QTcpServer m_Server;
}
.cpp
void QConsole::init()
{
m_Server.listen(QHostAddress::Any, 12346);
QDialog::connect(&m_Server, SIGNAL(newConnection()), this, SLOT(new_Connection()));
}
Main is:
int main( int argc, char *argv[] )
{
QApplication app(argc, argv);
QConsole * _output_window = new QConsole(desktopRect);
_output_window->init();
_output_window->show();
return app.exec();
}
new_Connection() никогда не вызывается, поэтому я не вижу релевантности, но вот оно:
void QConsole::new_Connection()
{
}
Это прекрасно работает, так как моя программа начинает прослушивать указанный порт, и если я подключаюсь к нему через соединениечто-то вроде этого, но new_Connection () никогда не вызывается!
Я видел сообщения по этой проблеме, начиная с 2005 года, так что это, очевидно, не новая вещь, но то, что я не нашел, является удовлетворительнымответ на проблему (или любой ответ на самом деле).Это ставит всех в тупик, даже человека, написавшего программу на Qt-сервере.Я предполагаю, что с существующей структурой что-то не так, но я понятия не имею, что это может быть.
Я рвал на себе волосы в течение полутора дней из-за этого, и закрытие, которое я добился успеха, использовало waitForNewConnection (), которое фактически возвращало бы мне сокет, но когда я подключился к readReady (Эмитент, который никогда не был уволен.Так что же помешало бы никогда не вызывать эти сигналы?
Пожалуйста, избавь меня от здравомыслия и помоги мне как можно больше.