標準のQUdpSocket
メソッドを正確に使用する場合、read()
とreadAll()
です。だから、QUdpSocket
のマニュアルに従って:あなたは標準QIODevice
機能read()
、readLine()
、write()
などを使用したい場合はQIODeviceとしてQUdpSocketを使用する
、最初
connectToHost()
を呼び出すことにより、ピアに直接ソケットを接続する必要があります。
私はbind()
後に直接connectToHost()
を呼び出す:
socket.bind(QHostAddress::LocalHost, 14560);
socket.connectToHost(QHostAddress::LocalHost, 14560);
今では読むことができますが、それはreadyRead()
信号を発することはありません。 QIODevice
の機能を使用する適切な方法は何ですかQUdpSocket
?
class DeviceReader : public QObject {
Q_OBJECT
public:
DeviceReader() {}
void setDevice(QIODevice * device) {
_device = device;
connect(device, &QIODevice::readyRead, this, &DeviceReader::onDataReceived);
}
void onDataReceived() {
qDebug() << "received: " << _device->readAll();
}
private:
QIODevice * _device;
};
main.cpp:
DeviceReader.h:
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
DeviceReader reader;
QUdpSocket socket;
socket.bind(QHostAddress::LocalHost, 14560);
socket.connectToHost(QHostAddress::LocalHost, 14560);
reader.setDevice(&socket);
return a.exec();
}
Qtのバージョンは5.7.0打ち鳴らすx64のです。 OS:macOS Sierra 10.12.2。
はい、動作しますが、この場合は 'read()'と 'write()'メソッドの代わりに 'readDatagram()'と 'writeDatagram()'を使用しなければなりません。そして、私は 'QIODevie'(' QTcpSocket'、 'QSerialPort'など)から受け取るために同じメソッド' onDataReceived() 'を使用したいと思います。 –
'read()'、 'write()'メソッドと 'readyRead()'シグナルを同時に使うことは可能ですか? –
Камиль、похожечтоのQIODeviceинтерфейсможноиспользоватьтолькодляUDP-клиентаКакой-то叙事詩:-(はуqt'шниковに失敗。 – Andrey