我正在使用gui实现以下链接:
http://www.bogotobogo.com/Qt/Qt5_QTcpServer_Multithreaded_Client_Server.php
我的代码与上面的链接相同。
我知道这是不可能的:
composer install --no-scripts
所以我刚刚创建了:
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;
}
正如我所说,我有一个服务器和几个客户端由线程处理。我想以某种方式将我的GUI连接到MyThread中的套接字。 我需要的是当我在文本框中写一些文本并按下主窗口中的按钮时,它会转到套接字并将响应返回到另一个文本框。
我已经塞了,但我不明白怎么做。
答案 0 :(得分:0)
为什么不创建一个新信号,该信号将在on_pushButton_clicked()
中发出,并将您的数据从 MainWindow 文本字段发布到特定线程,然后将其写入插座?接收可以以相同的方式进行组织。
如果您在MyServer
类构造函数中创建MainWindow
对象,则可以更改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);
}