2011-10-08 24 views
12

Tôi đang cố gắng phát ra chuỗi chuẩn với tín hiệu qt. Tín hiệu sẽ được phân phối dưới dạng xếp hàng đợi. Tôi đã đăng ký loại với qRegisterMetaType, giống như nó đã nói trong tài liệu qt, nhưng không có may mắn. Tôi đăng ký nó như thế này qRegisterMetaType<std::string>("std::string")phát ra std :: chuỗi với tín hiệu qt

Trả lời

17

Bạn cũng nên làm:

Q_DECLARE_METATYPE (std::string) 

Trích dẫn Qt Doc

Thêm một Q_DECLARE_METATYPE() làm cho các loại tiếng cho tất cả các mẫu chức năng dựa, bao gồm cả QVariant. Lưu ý rằng nếu bạn có ý định sử dụng loại trong tín hiệu và khe cắm kết nối xếp hàng đợi hoặc trong hệ thống tài sản QObject của, bạn cũng phải gọi qRegisterMetaType() kể từ khi tên được giải quyết trong thời gian chạy.

+0

Tôi đã thử, vẫn không hoạt động. Ngoài ra tôi có nhiều tín hiệu trong dự án của tôi đang phát ra các loại qt không và không bao giờ thực hiện Q_DECLARE_METATYPE trên chúng, chỉ qRegisterMetaType và chúng đang hoạt động. – user152508

+1

Tôi vừa làm một bài kiểm tra nhanh và sử dụng cả qRegisterMetaType cùng với Q_DECLARE_METATYPE thực sự hoạt động. Rời một trong hai kết quả trong một thông báo lỗi thời gian chạy về việc cần gọi qRegisterMetaType. Tôi đoán là đối với các loại khác bạn đang sử dụng, bạn không sử dụng kết nối Queued. – Chris

+0

ok, tôi đã sử dụng này quá tải void qRegisterMetaTypeStreamOperators (const char * typeName) có thể là lý do tại sao nó không hoạt động. Khi cố gắng này overlaod int qRegisterMetaType() với sự kết hợp của Q_DECLARE_METATYPE nó hoạt động, vì vậy Cảm ơn bạn rất nhiều. – user152508

Các vấn đề liên quan