2009-10-14 20 views
6

Tôi biết rằng tôi có thể sử dụng QSignalMapper để gọi một vị trí với các thông số khác nhau dựa trên kết nối. Những gì tôi muốn đạt được là một chút khác nhau.Tín hiệu Bản đồ Qt Dựa trên Giá trị Tham số

Chúng tôi đang sử dụng các plugin trong ứng dụng của chúng tôi và các plugin khác nhau chịu trách nhiệm cho các loại đối tượng khác nhau. Chúng tôi đang kết nối nhiều vị trí, mỗi vị trí được triển khai trong một plugin khác nhau, với một tín hiệu được phát ra bởi ứng dụng chính. Một trong các tham số của tín hiệu là QString cho biết loại đối tượng được liên kết với tín hiệu. Hiện tại, chúng tôi đang kiểm tra thông số này trong các vị trí và tiếp tục nếu loại được xử lý bởi plugin. Điều này có một nhược điểm, tất cả các plugin hiện kiểm tra này và tôi muốn tránh điều này nếu có thể.

Tôi muốn kết nối tất cả các khe với cùng tín hiệu và khi tín hiệu được phát ra, chỉ có khe thích hợp được gọi tùy thuộc vào giá trị của đối số QString, giống như một QSignalMapper nhưng theo một cách khác.

Có cơ chế tích hợp nào để thực hiện việc này không? Nếu không, bất kỳ ý tưởng về cách tôi có thể đạt được điều này?

Cảm ơn bạn trước.

Trả lời

3

Tôi không nghĩ rằng có một thành phần cho rằng, nhưng bạn có thể tạo mapper tín hiệu riêng của bạn như thế này:

  1. tạo ra một thành phần MySignalMapper
  2. đang là một phương pháp addSourceSignal để thiết lập các tín hiệu của chính ứng dụng
  3. mã phương thức addDestinationSlot lấy cặp QString/slot và ánh xạ chuỗi đó vào vị trí.
  4. trong thành phần của bạn kết nối tín hiệu nguồn với vị trí tùy chỉnh gửi dựa trên giá trị qstring. Bạn có thể gọi một khe với QMetaObject :: invokeMethod.
0

Bạn có thể hạn chế các giá trị được phép của chuỗi "loại" thành tên hàm C++ hợp lệ. Buộc các plugin đặt tên cho các vị trí của chúng theo các loại chúng xử lý, sau đó cho mỗi plugin, chỉ cần cố gắng kết nối các khe được đặt tên thích hợp.

Nói cách khác, bạn có thể làm những gì QMetaObject::connectSlotsByName, ngoại trừ triển khai quy ước đặt tên của riêng bạn.

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