我想用一些标准的QUdpSocket
方法精确地为read()
和readAll()
。因此,根据QUdpSocket
文件:使用QUdpSocket作为QIODevice
如果你想使用标准
QIODevice
功能read()
,readLine()
,write()
,等等,你必须首先通过直接调用connectToHost()
连接插座同行。
我叫connectToHost()
bind()
后直接:
socket.bind(QHostAddress::LocalHost, 14560);
socket.connectToHost(QHostAddress::LocalHost, 14560);
现在可以读,但它并没有发出readyRead()
信号。使用QUdpSocket
的QIODevice
函数的正确方法是什么?
DeviceReader.h:
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:
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铛64。操作系统:macOS Sierra 10.12.2。
是的,但在这种情况下,我必须使用'readDatagram()'和'writeDatagram()',而不是'read()'和'write()'方法。我想用同样的方法'onDataReceived()'从任何'QIODevie'('QTcpSocket','QSerialPort'等)接收。 –
那么,是否可以同时使用'read()','write()'方法和'readyRead()'信号? –
Камиль,похожечто的QIODeviceинтерфейсможноиспользоватьтолькодляUDP-клиента:-(Какой-то史诗失败уqt'шников。 – Andrey