В отличие от
01 int main(int argc, char *argv[])
02 {
03 QApplication app(argc, argv);
04 WeatherBalloon balloon;
05 balloon.show;
06 return app.exec;
07 }
Функция
Теперь давайте рассмотрим исходный код клиентского приложения Weather Station.
01 class WeatherStation : public QDialog
02 {
03 Q_OBJECT
04 public:
05 WeatherStation(QWidget *parent = 0);
06 private slots:
07 void processPendingDatagrams;
08 private:
09 QUdpSocket udpSocket;
10 QLabel *dateLabel;
11 QLabel *timeLabel;
12 QLineEdit *altitudeLineEdit;
13 };
Класс
01 WeatherStation::WeatherStation(QWidget *parent)
02 : QDialog(parent)
03 {
04 udpSocket.bind(5824);
05 connect(&udpSocket, SIGNAL(readyRead),
06 this, SLOT(processPendingDatagrams));
07 }
Конструктор мы начинаем с привязки объекта
01 void WeatherStation::processPendingDatagrams
02 {
03 QByteArray datagram;
04 do {
05 datagram.resize(udpSocket.pendingDatagramSize);
06 udpSocket.readDatagram(datagram.data, datagram.size);
07 } while (udpSocket.hasPendingDatagrams);
08 QDateTime dateTime;
09 double temperature;
10 double humidity;
11 double altitude;
12 QDataStream in(&datagram, QIODevice::ReadOnly);
13 in.setVersion(QDataStream::Qt_4_1);
14 in >> dateTime >> temperature >> humidity >> altitude;
15 dateLineEdit->setText(dateTime.date.toString);
16 timeLineEdit->setText(dateTime.time.toString);
17 temperatureLineEdit->setText(tr("%1° C").arg(temperature));
18 humidityLineEdit->setText(tr("%1%").arg(humidity));
19 altitudeLineEdit->setText(tr("%1 m").arg(altitude));
20 }