天津建站服务,asp.net网站设计分工,wordpress下拉,上传网站过程自定义信号#xff0c;需要 1.在singnals:区域下写信号函数#xff0c;以及函数对应的参数 2. 需要emit关键字进行发射信号 3. 在需要处理该信号的其他类中#xff0c;建立信号和其信号槽函数connect() 4. 在其他类中创建信号处理槽函数
#include mythread.hmy…自定义信号需要 1.在singnals:区域下写信号函数以及函数对应的参数 2. 需要emit关键字进行发射信号 3. 在需要处理该信号的其他类中建立信号和其信号槽函数connect() 4. 在其他类中创建信号处理槽函数
#include mythread.hmyThread::myThread(QTcpSocket *s)
{socket s;
}// 对线程的run方法进行重写, 相当于线程处理函数
void myThread::run() {// 启动线程后应该建立连接关于readyReadconnect(socket, QTcpSocket::readyRead, this, myThread::clientInfoHandler);
}void myThread::clientInfoHandler(){// 线程不能对ui进行操作只能在创建和ui同名的wiget类中操作// qDebug() socket-readAll();// 所以需要在thread中自定义信号在wiget中用于触发信号和对应槽函数QByteArray b socket-readAll();emit sendToWidget(b); // 发起信号
}
#include widget.h
#include ui_widget.hWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);// 服务端有QTcpServer库封装了监听操作server new QTcpServer();// 直接监听内部根据传入的ip和端口进行绑定server-listen(QHostAddress::AnyIPv4, SERVER_PORT);// 对server进行新的连接信号建立信号槽connect(server, QTcpServer::newConnection, this, Widget::newClientHandler);}Widget::~Widget()
{delete ui;
}void Widget::newClientHandler()
{// 将获取到的新的连接套接字中获取客户端ip和端口socket server-nextPendingConnection();ui-hostLineEdit-setText(socket-peerAddress().toString());ui-portLineEdit-setText(QString::number(socket-peerPort()));// 新的消息到来时connect 数据read和处理信号槽函数// connect(socket, QTcpSocket::readyRead, this, Widget::clientInfoSlot);// 创建线程来一个连接后就创建一个线程在线程中进行socket的数据接收myThread* thread new myThread(socket);thread-start();// thread线程对象发出信号widget中建立对应的槽函数connect(thread, myThread::sendToWidget, this, Widget::threadMessageSlot);
}void Widget::threadMessageSlot(QByteArray b){ui-chatLineEdit-setText(QString(b));
}void Widget::clientInfoSlot()
{ui-chatLineEdit-setText(QString(socket-readAll()));
}void Widget::on_closeButton_clicked()
{socket-close();
}