欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 10.10 Qt定时器和Tcp通信

10.10 Qt定时器和Tcp通信

2024/10/26 9:33:30 来源:https://blog.csdn.net/m0_68908707/article/details/142832106  浏览:    关键词:10.10 Qt定时器和Tcp通信

闹钟

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer=new QTimer(this);connect(timer,&QTimer::timeout,this,&Widget::updatetime_slot);ui->startbtn->setDefault(true);timer->start(1000);//updatetime_slot();
}Widget::~Widget()
{delete ui;
}void Widget::updatetime_slot()
{QString currenttime=QDateTime::currentDateTime().toString("hh:mm:ss");ui->label->setText(currenttime);
}void Widget::timerEvent(QTimerEvent *event)
{if(event->timerId()==clocktimerid1){if(ui->lineEdit->text()==ui->label->text()){ui->textEdit->setText("闹钟响了!!!");ui->flaglab->clear();ui->startbtn->setEnabled(true);this->killTimer(clocktimerid1);}}
}void Widget::on_startbtn_clicked()
{clocktimerid1=this->startTimer(1000);ui->startbtn->setEnabled(false);ui->flaglab->setText("闹钟已设定!");
}void Widget::on_stopbtn_released()
{this->killTimer(clocktimerid1);ui->startbtn->setEnabled(true);ui->flaglab->clear();
}

tcp服务器

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);server=new QTcpServer(this); //实例化服务器connect(server,&QTcpServer::newConnection,this,&Widget::newconnection_slot);
}Widget::~Widget()
{delete ui;}void Widget::on_serverbtn_clicked()
{if(ui->serverbtn->text()=="启动服务器"){quint16 port=ui->portEdit->text().toUInt();//获取输入的端口if(!server->listen(QHostAddress::Any,port)){QMessageBox::information(this,"提示","服务器启动失败!");return;}ui->serverbtn->setText("关闭服务器");}else{server->close();ui->serverbtn->setText("启动服务器");}
}void Widget::newconnection_slot()
{qDebug()<<"已连接";QTcpSocket *s=server->nextPendingConnection();//最新套接字连接地址clientlist.push_back(s);//存入链表connect(s,&QTcpSocket::readyRead,this,&Widget::readyread_slot);
}void Widget::readyread_slot()
{for(auto val:clientlist)//遍历所有客户端{if(val->bytesAvailable())//检测套接字中能被读取的字节个数{QByteArray msg=val->readAll();ui->listWidget->addItem(QString::fromLocal8Bit(msg));for(auto key:clientlist)//转发给其他客户端{key->write(msg);}}}
}

Tcp客户端

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);client = new QTcpSocket(this);connect(client,&QTcpSocket::connected,this,&Widget::connected_slot);connect(client,&QTcpSocket::readyRead,this,&Widget::readyread_slot);
}Widget::~Widget()
{delete ui;
}void Widget::on_connectbtn_released()
{username=ui->nameEdit->text();QString ip=ui->IPedit->text();quint16 port =ui->portEdit->text().toUInt();client->connectToHost(ip,port);}void Widget::connected_slot()
{QString msg=username+"已连接";client->write(msg.toLocal8Bit());
}void Widget::readyread_slot()
{QByteArray msg=client->readAll();ui->listWidget->addItem(QString::fromLocal8Bit(msg));
}void Widget::on_sendbtn_released()
{QString msg=username+":"+ui->msgEdit->text();client->write(msg.toLocal8Bit());ui->msgEdit->clear();
}void Widget::on_disconnectbtn_released()
{QString msg=username+"已断开";client->write(msg.toLocal8Bit());client->disconnectFromHost();
}void Widget::disconneted_slot()
{QMessageBox::information(this,"断开","断开成功!");
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com