好像qt自己带的例子只有TCP的,UDP的没有。我自己写了个
dialog.h头文件:
#ifndef DIALOG_H
#define DIALOG_H
#include <QtGui/QDialog>
#include "thread.h"
class QLabel;
class QLineEdit;
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void set();
private:
QLabel *label;
QLineEdit *t;
QPushButton *btn;
Thread thread;
};
class Temp
{
public:
static QString str;
};
#endif // DIALOG_H
thread.h头文件:
#ifndef THREAD_H
#define THREAD_H
#include <QThread>
#include <QtGui>
#include <QUdpSocket>
class Thread : public QThread
{
Q_OBJECT
public:
Thread();
protected:
void run();
signals:
void ok();
private slots:
void processPendingDatagrams();
private:
QUdpSocket *udpSocket;
};
#endif // THREAD_H
dialog.cpp源文件:
#include "dialog.h"
#include <QtGui>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
label=new QLabel(tr("现在时间:"));
t=new QLineEdit;
btn=new QPushButton(tr("close"));
connect(&thread,SIGNAL(ok()),this,SLOT(set()));
connect(btn,SIGNAL(clicked()),this,SLOT(close()));
QHBoxLayout *h=new QHBoxLayout;
h->addWidget(label);
h->addWidget(t);
QVBoxLayout *v=new QVBoxLayout;
v->addLayout(h);
v->addWidget(btn);
setLayout(v);
resize(200,60);
this->setWindowTitle(tr("时钟"));
}
Dialog::~Dialog()
{
}
void Dialog::set()
{
t->setText(Temp::str);
}
thread.cpp源文件:
#include "thread.h"
#include "dialog.h"
#include <QObject>
Thread::Thread()
{
start();
}
void Thread::run()
{
udpSocket=new QUdpSocket(0);
udpSocket->bind(5824);
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(processPendingDatagrams()));
exec();
}
void Thread::processPendingDatagrams()
{
QByteArray datagram;
do {
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
} while (udpSocket->hasPendingDatagrams());
QDateTime dateTime;
//QString d;
QDataStream in(&datagram, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_4_3);
in >> dateTime ;
Temp::str=dateTime.time().toString();
emit ok();
}
mian.cpp源文件:
#include <QtGui/QApplication>
#include "dialog.h"
#include <QtCore/QTextCodec>
#include "thread.h"
QString Temp::str="123";
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
Dialog w;
w.show();
return a.exec();
}
运行是可以运行,也能接收数据。
不过,关闭窗口时,会发生这个提示:QThread: Destroyed while thread is still running