2017-04-14 5 views
0

プログラミングマルチクライアントソケットスレッド:のQt - GUIベースと私はGUIを使用して、リンクの下に実施しています

http://www.bogotobogo.com/Qt/Qt5_QTcpServer_Multithreaded_Client_Server.php

私のコードは、上記のリンクと同じです。だから私はちょうど作成した

class MainWindow : public QMainWindow , public QTcpServer 

は、私はそれは不可能に知っている

//mainwindow.h 
#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include "myserver.h" 


namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(MyServer *ms, QWidget *parent = 0); 
    ~MainWindow();  

private slots: 
    void on_pushButton_clicked(); 

private: 
    Ui::MainWindow *ui; 
}; 

#endif // MAINWINDOW_H 

//mainwindow.cpp 
#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(MyServer *ms, QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    ms->StartServer(); 
    connect(this,SIGNAL(SendCommand(QString)),ms,SLOT(GetCommand(QString))); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

//main.cpp 
#include "mainwindow.h" 
#include <QApplication> 
#include "myserver.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    MyServer *Server = new MyServer; 

    MainWindow w(Server); 
    w.show(); 

    return a.exec(); 
} 
を修正しました

私が言ったように、私はサーバといくつかのクライアントをスレッドで扱っています。私は何とかMyThreadのソケットに自分のGUIを接続したいです。 私が必要とするのは、テキストボックスにテキストを書き、メインウィンドウのボタンを押すと、ソケットに書き込まれ、別のテキストボックスに応答が返されます。

私は詮索しましたが、私はどのように理解できません。

答えて

0

は、なぜあなたはon_pushButton_clicked()に放出され、その後ソケットに書き込みます特定のスレッドにメインウィンドウテキストフィールドからデータをポストする新しい信号を作成しませんか?受信は同じ方法で実行することができます。あなたはMainWindowクラスのコンストラクタであなたのMyServerオブジェクトを作成した場合

は、あなたが追加して、あなたのMyServerコンストラクタを変更することができます。

MyServer(MainWindow* parent) 
{ 
     //Save parent somewhere inside the class 
     my_parent = parent; 
} 

void MyServer::incomingConnection(qintptr socketDescriptor) 
{ 
    // We have a new connection 
    qDebug() << socketDescriptor << " Connecting..."; 

    // Every new connection will be run in a newly created thread 
    MyThread *thread = new MyThread(socketDescriptor, this); 

    // connect signal/slot 
    // once a thread is not needed, it will be beleted later 
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); 

    thread->start(); 

    QObject::connect(my_parent, &MainWindow::myNewSendigQStrigSignal, thread, &MyThreadClass::slotNewMsg); 
} 

そしてon_pushButton_clickedの実現はそのような何か

MainWindow::on_pushButton_clicked() 
{ 
    QString data = getDataFromTextField(); 
    emit myNewSendigQstrigSignal(data); 
} 
+0

感謝親愛なるアレックスに見えます、 MainWindowではなくMyServerクラスにMyThreadクラスのインスタンスがあるので、接続できません。あなたが私に本当にありがたいことがわかっている場合は、詳細を例に挙げてください。 –

+0

よろしくお願いします。 main関数に 'MyServer'オブジェクトを作成する必要がありますか、それを' MainWindow'クラスに移動することは可能ですか?これを 'MainWindow'に移動するとコンストラクタが単純化され、あなたの質問を解決する少しの方法も単純化されると私は思います。 – Alex

+0

問題ありません。 –

関連する問題