04 QDataStream out(█, QIODevice::WriteOnly);
05 out.setVersion(QDataStream::Qt_4_1);
06 out << quint16(0) << quint8('S') << fromComboBox->currentText
07 << toComboBox->currentText << dateEdit->date
08 << timeEdit->time;
09 if (departureRadioButton->isChecked) {
10 out << quint8('D');
11 } else {
12 out << quint8('A');
13 }
14 out.device->seek(0);
15 out << quint16(block.size - sizeof(quint16));
16 tcpSocket.write(block);
17 statusLabel->setText(tr("Sending request..."));
18 }
Слот
Запрос является двоичным блоком следующего формата:
Сначала мы записываем данные в массив типа
Сначала мы записываем 0 в поле размера блока и затем размещаем остальные данные. Затем мы делаем вызов
01 void TripPlanner::updateTableWidget
02 {
03 QDataStream in(&tcpSocket);
04 in.setVersion(QDataStream::Qt_4_1);
05 forever {
06 int row = tableWidget->rowCount;
07 if (nextBlockSize == 0) {
08 if (tcpSocket.bytesAvailable < sizeof(quint16))
09 break;
10 in >> nextBlockSize;
11 }
12 if (nextBlockSize == 0xFFFF) {
13 closeConnection;
14 statusLabel->setText(tr("Found %1 trip(s)").arg(row));
15 break;
16 }
17 if (tcpSocket.bytesAvailable < nextBlockSize)
18 break;
19 QDate date;
20 QTime departureTime;
21 QTime arrivalTime;
22 quint16 duration;
23 quint8 changes;
24 QString trainType;
25 in >> date >> departureTime >> duration >> changes >> trainType;
26 arrivalTime = departureTime.addSecs(duration * 60);
27 tableWidget->setRowCount(row + 1);
28 QStringList fields;
29 fields << date.toString(Qt::LocalDate)
30 << departureTime.toString(tr("hh:mm"))
31 << arrivalTime.toString(tr("hh:mm"))