Tôi muốn có thể gửi tín hiệu Qt qua mạng. Serializing một cuộc gọi tín hiệu là khá thẳng về phía trước sử dụng hệ thống kiểu meta Qt của:Cơ chế tín hiệu/khe của Qt qua mạng
- Tạo một
qMetaMethod
sử dụng phương pháp tĩnh::fromSignal
- Lấy tên phương pháp, tên tham số, typeIds họ
[1]
và giá trị sử dụng phương pháp meta tạo. - Đóng gói mọi thứ vào định dạng ưa thích của bạn (JSON, XML) và gửi nó.
Nhưng cho đến nay tôi không thể tìm ra cách gọi tín hiệu bằng dữ liệu được tuần tự hóa: QMetaObject::invokeMethod(..)
lấy tên tín hiệu/phương thức làm chuỗi. Vấn đề là các đối số: Chúng phải được cung cấp dưới dạng QGenericArgument
và chỉ có thể được tạo bằng cách sử dụng macro Q_ARG
yêu cầu loại thực tế (không phải là chuỗi tên hoặc typeId
) và giá trị liên quan. Ngoài ra số lượng đối số phải được xác định tại thời gian biên dịch, không có số invokeMethod(..)
có danh sách các đối số.
Tôi có thiếu gì đó không? Hoặc là có một cách tốt hơn/thay thế để làm điều này?
[1]
Câu hỏi tiếp theo: Làm cách nào để đảm bảo rằng các loại luôn nhận được cùng loại ID khi chúng được đăng ký sử dụng Q_DECLARE_METATYPE(..)
?
Bạn không thiếu gì cả. –
Er .... Tôi không nghĩ rằng cơ chế tín hiệu/khe được thiết kế để hoạt động trên toàn mạng. Tôi rất vui khi thấy bản thân mình đã chứng minh sai về vấn đề này. –
IMHO, IPC dựa trên ổ cắm là một chìa khóa và sau đó chuyển đổi tín hiệu/khe cắm chỉ là đậu phộng có nghĩa là tín hiệu và khe cắm được biết đến cả hai quá trình trên các mặt khác nhau của IPC. – AlexanderVX