나는 신호로 데이터를 방출하고 새로운 신호와 슬롯을 추가 한 슬롯 사이의 연결을 연결합니다.
빠른 자체 포함 예제 (어떤 코드 길이로 인해 여기에 붙여 넣을 수 없습니다."단지 변명, 당신은 거의 항상
헤더) 귀하의 관련 코드를 줄일 수있다 :
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include <QTextEdit>
class NetworkFile;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow(){}
public slots:
void addText(QString str)
{
edit->append(str);
}
private:
QTextEdit* edit;
NetworkFile* net;
};
class NetworkFile : public QObject
{
Q_OBJECT
public:
NetworkFile(QObject *parent = 0):
QObject(parent)
{
connect(&server, &QTcpServer::newConnection,
this, &NetworkFile::newConnection);
//TODO: check return value
server.listen(QHostAddress::Any,16001);
}
signals:
void dataRead(QString);
public slots:
void newConnection(){
//TODO: wire up socket disconnect with deleteLater, also check for null
QTcpSocket* socket = server.nextPendingConnection();
connect(socket, &QTcpSocket::readyRead,
this, &NetworkFile::dataAvailable);
}
void dataAvailable(){
//HACK: only for brevity, create a connection wrapper that contains the socket in real code
QTcpSocket* source = (QTcpSocket*)sender();
auto bytes = source->readAll();
if(bytes.size())
{
emit dataRead(QString(bytes));
}
}
private:
QTcpServer server;
};
#endif // MAINWINDOW_H
CPP 파일
#include "mainwindow.h"
#include <QApplication>
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent)
{
edit = new QTextEdit(this);
net = new NetworkFile(this);
connect(net, &NetworkFile::dataRead,
this, &MainWindow::addText);
setCentralWidget(edit);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
"때문에 코드의 길이에 내가 할 수 없습니다입니다 여기에 붙여 넣으세요. "어쨌든 * 여기에 * 이러한 코드를 붙여 넣어야합니다. 질문을 묻는 사람으로서의 당신의 직업은 문제를 재현하는 최소한의 예를 제공하는 것입니다. 자동으로 발생하지는 않습니다. 저장소에있는 지사가 문제를 최소화하고 단일 파일로 최소화하면 오직 질문의 일부로 게시하십시오. 질문에 포함하기에 합당하다고 여겨지는 150 줄 아래에서 재현되지 않는 문제는 거의 없습니다. –