これと同様の質問が寄せられていることは知っていますが、問題を解決する答えが見つかりません。
私の会社が使用するプログラムにサーバー機能を追加するために、いくつかの既存の 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()));
}
主なものは次のとおりです。
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()
{
}
これは、プログラムが指定されたポートでリッスンを開始し、それに telnet で接続すると、ある種の接続が確立されるという点でうまく機能しますが、new_Connection() が呼び出されることはありません!
2005 年にさかのぼるこの問題に関する投稿を見たことがあるので、明らかに新しいことではありませんが、問題に対する満足のいく答え (または実際の答え) は見つかりませんでした。これは、Qt サーバー プログラムを書いた人でさえ、職場の全員を困惑させました。既存のフレームワークに根本的な問題があると推測していますが、それが何であるかはわかりません。
私はこれで1日半髪を引き裂いていました.成功に近づいたのは、実際にソケットを返すwaitForNewConnection()を使用することでしたが、readReady()エミッタに接続したとき、それは決してありませんでしたどちらかを解雇した。では、これらのシグナルが呼び出されないようにするにはどうすればよいでしょうか?
私の正気を惜しまないで、できる限り私を助けてください。