C++ (Qt)class A : ...{ QTextEdit *textEdit; void showB() { B *b = new B(this); connect(b, SIGNAL(sendText(QString)), textEdit, SLOT(setPlainText(QString))); b->show(); }}; class B : ...{ void someMethod() { emit sendText("my text"); } signals: void sendText(const QString &text);};
C++ (Qt)class A : ...{ void someMethod() { B *b = ... // получаешь указатель на существующий экземпляр класса каким-то образом QString textFromB = b->textEdit->toPlainText(); }}; class B : ...{public: QTextEdit *textEdit;};
class EchoServer : public QTcpServer
class MainWindow : public QMainWindow
public QTcpServer
C++ (Qt)#include "EchoServer.h" class MainWindow : public QMainWindow{ // ...private: EchoServer *m_echoServer;}
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtCore>#include <QtNetwork>#include <qtcpserver.h>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); Ui::MainWindow *ui; bool start(); QList<QTcpSocket*> m_clients; QTcpServer *as;private slots: void on_pushButton_2_clicked(); void addConnection(); void removeConnection(); void onRead(); void displayError(QAbstractSocket::SocketError); void on_pushButton_3_clicked();private:};#endif // MAINWINDOW_H
#include "mainwindow.h"#include "ui_mainwindow.h"#include <iostream>#include <QtCore>#include <QtNetwork>#include <qtcpserver.h>#define STR(s) ((QTextCodec::codecForLocale()->fromUnicode(s)).constData())using namespace std;MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_2_clicked(){ start(); as = new QTcpServer(this);}bool MainWindow::start(){ QHostAddress addr; if (!as->listen(QHostAddress::Any, 5555)) { //cout << STR(QObject::tr("Не могу запустить сервер: %1\n").arg( errorString() ) ); Вывести результат в textEdit close(); return false; } connect(this, SIGNAL(newConnection()), this, SLOT(addConnection())); // cout << STR(QObject::tr("Сервер запущен\n")); return true;}void MainWindow::addConnection(){ QTcpSocket *client = as->nextPendingConnection(); connect(client, SIGNAL(disconnected()), this, SLOT(removeConnection())); connect(client, SIGNAL(readyRead()), this, SLOT(onRead())); connect(client, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError))); QHostAddress addr = client->peerAddress(); // cout << STR(QObject::tr("Подключился новый клиент с адреса %1\n").arg(addr.toString())); Вывести результат в textEdit m_clients.append(client);}void MainWindow::removeConnection(){ QTcpSocket *client = qobject_cast<QTcpSocket*>(sender()); QHostAddress addr = client->peerAddress(); // cout << STR(QObject::tr("Клиент %1 отключен\n").arg(addr.toString())); Вывести результат в textEdit m_clients.removeAt(m_clients.indexOf(client)); client->deleteLater();}void MainWindow::onRead(){ QTcpSocket *client = qobject_cast<QTcpSocket*>(sender()); QByteArray block = client->readAll(); QString buffer = QTextCodec::codecForTr()->toUnicode(block.data()); /* if ( s.contains(0x08) ) { cout << STR(QObject::tr("\nСервер остановлен\n")); deleteLater(); QCoreApplication::instance()->exit(); return; } */ QHostAddress addr = client->peerAddress(); // cout << STR(QObject::tr("Получены новые данные от клиента %1: %2\n").arg( addr.toString() ).arg(buffer)); Вывести результат в textEdit client->write(QTextCodec::codecForLocale()->fromUnicode(buffer));}void MainWindow::displayError(QAbstractSocket::SocketError){ //cout << STR(QObject::tr("\nОшибка: %1\n").arg(errorString())); Вывести результат в textEdit}void MainWindow::on_pushButton_3_clicked(){ while (!m_clients.isEmpty()) { QTcpSocket *client = m_clients.takeFirst(); // client->write(QTextCodec::codecForLocale()->fromUnicode(QObject::tr("\nСервер отключается") + 0x0d )); Вывести результат в textEdit client->flush(); client->close(); client->deleteLater(); }}
C++ (Qt) start(); as = new QTcpServer(this);
C++ (Qt) #include <iostream>#include <QTextCodec>#include <QObject> #define STR(s) ((QTextCodec::codecForLocale()->fromUnicode(s)).constData()) int main(){ std::cout << STR(QObject::tr("Не могу запустить сервер") );}