我想用一些標準的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