Qt documentation nói, giá trị trở lại của tín hiệu là không thể:Qt: Giá trị trả về của tín hiệu hoạt động, tại sao tài liệu chính thức lại nói rằng nó là không thể/bị cấm?
Tín hiệu sẽ được tự động tạo ra bởi các moc và không được triển khai trong tệp cpp. Họ không bao giờ có thể trả lại các loại (ví dụ: sử dụng khoảng trống).
liên quan SO câu hỏi:
Tuy nhiên, từ các thử nghiệm của tôi (Qt 4.8.1) tôi có thể nói giá trị trở lại làm việc:
- Nếu tín hiệu/vị trí nằm trong cùng một Thr ead, ConnectionType có thể
Qt::AutoConnection
- Với tín hiệu/khe trong chủ đề khác nhau tôi cần phải sử dụng
Qt::BlockingQueuedConnection
Vì vậy, trong mã của tôi, tôi gọi một tín hiệu bằng
QString dp = emit WscAircrafts::signalAircraftsJsonArray();
và moc tín hiệu trả về một QString
,
QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
Đây là moc khe nơi nó trả lại QString
case 4: { QString _r = _t->slotAircraftJsonArray();
if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;
Tất cả điều này có vẻ khá thẳng về phía trước, vậy tại sao điều này mâu thuẫn với tài liệu? Trường hợp sẽ là vấn đề bằng cách sử dụng giá trị trả lại? Như đã nói, trong mã của tôi, điều này dường như hoạt động.
điều gì sẽ xảy ra nếu tín hiệu được kết nối với nhiều vị trí? –
Trong một câu hỏi tương tự khác trả lời nó nói: "Có vẻ như điều này là có thể. Tôi đã có thể phát ra một tín hiệu, và nhận giá trị từ khe mà tín hiệu được kết nối. Nhưng, vấn đề là nó chỉ trả về giá trị trả về cuối cùng từ nhiều vị trí được kết nối ". Phải là lý do tại sao họ không muốn quảng cáo tính năng này –
@RomanSaveljev - nó cũng sẽ phải chặn cho đến khi vị trí đã hoàn thành? –