Qt学习笔记-简单的UDP广播包聊天室

运行截图如下:


代码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class QUdpSocket;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public slots:
void dataReceived();
void btnClicked();
void widgetEnable(QString data);
void setPortBtnClickd();
void peerLineEditChange(QString data);
private:
Ui::Widget *ui;
QUdpSocket *m_udpSocket;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QHostAddress>
#include <QUdpSocket>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->inputLineEdit->setEnabled(false);
ui->sendPushButton->setEnabled(false);
ui->peerLineEdit->setEnabled(false);
ui->userLineEdit->setEnabled(false);
connect(ui->userLineEdit,SIGNAL(textChanged(QString)),this,SLOT(widge
tEnable(QString)));
connect(ui->setPortPushButton,SIGNAL(clicked(bool)),this,SLOT(setPort
BtnClickd()));
connect(ui->peerLineEdit,SIGNAL(textEdited(QString)),this,SLOT(peerLi
neEditChange(QString)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::dataReceived(){
while(m_udpSocket->hasPendingDatagrams()){
QByteArray datagram;
datagram.resize(m_udpSocket->pendingDatagramSize());
m_udpSocket->readDatagram(datagram.data(),datagram.size());
ui->listWidget->insertItem(0,QString::fromLocal8Bit(datagram.data()))
;
qDebug()<<QString::fromLocal8Bit(datagram.data());
}
}
void Widget::btnClicked()
{
QString msg=ui->userLineEdit->text()+QString::fromLocal8Bit(" >
")+ui->inputLineEdit->text();
QByteArray datagram=msg.toLocal8Bit();
qDebug()<<"msg:"<<msg<<"msg.size"<<msg.size();
m_udpSocket->writeDatagram(datagram,datagram.size(),QHostAddress::Bro
adcast,ui->peerLineEdit->text().toInt());
ui->listWidget->insertItem(0,"我 > "+ui->inputLineEdit->text());
}
void Widget::widgetEnable(QString data)
{
if(!data.isEmpty()){
ui->inputLineEdit->setEnabled(true);
ui->sendPushButton->setEnabled(true);
}
}
void Widget::setPortBtnClickd()
{
m_udpSocket=new QUdpSocket(this);
connect(m_udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
if(!m_udpSocket->bind(ui->portLineEdit->text().toInt())){
QMessageBox::information(this,"错误","端口绑定失败");
return;
}
connect(ui->sendPushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked
()));
ui->peerLineEdit->setEnabled(true);
}
void Widget::peerLineEditChange(QString data)
{
if(!data.isEmpty()){
ui->userLineEdit->setEnabled(true);
}
}

main.cpp

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/80529737