2010-01-15 11 views
8

Tôi có thể tưởng tượng rằng có thể có một vài người trong số họ tùy thuộc vào sự kiện, nhưng đồng thời, tôi đoán đây có thể là cách tốt nhất để gỡ lỗi và một bài học thú vị.Làm thế nào để đánh chặn TẤT CẢ các tín hiệu phát ra bởi một sự kiện đã cho trong Qt?

Tại sao tôi cần nó? Tôi đang sử dụng một số lớp tùy chỉnh dựa trên QWidget, không mở rộng khi tôi không đính kèm một số QDockWidget có trụ sở trong cùng một cửa sổ. Biết được những tín hiệu nào được phát ra khi phụ tùng dock này bị loại bỏ sẽ giúp tôi chọn phương thức nào tôi cần ghi đè trong lớp tùy chỉnh của mình.

Nói cách khác, tôi không muốn kiểm tra mọi tín hiệu có thể từ tài liệu, nhưng chỉ xem những tín hiệu nào được phát ra khi tôi thực hiện một số hành động trong ứng dụng của mình.

Trả lời

9

Điều này là không thể với bất kỳ API công khai nào.

Nhưng, nếu bạn đặt mã của mình vào thử nghiệm đơn vị dựa trên QTestLib, bạn có thể chạy thử nghiệm đơn vị với -vs để in ra mọi tín hiệu được phát ra.

6

Bạn có thể muốn xem qua lớp QSignalSpy. Tôi nghĩ rằng mặc dù bạn phải kết nối bằng tay tín hiệu bạn muốn gián điệp.

3

Tôi không nghĩ rằng điều này là có thể với Qt. Bạn có thể

  • liệt kê tất cả các tín hiệu của lớp bằng phương pháp QMetaObject :: và QMetaMethod :: methodType;
  • đính kèm một trong các vị trí của riêng bạn vào tất cả các tín hiệu đó;
  • kiểm tra ai đã gọi một vị trí bằng cách sử dụng QObject :: người gửi.

Nhưng tôi bị kẹt sau này. Tôi không nghĩ rằng, bên cạnh người gửi, bất kỳ thông tin có thể thu được về cách một khe đã được gọi.

+0

Cảm ơn lời khuyên! Làm thế nào để làm điều đó? QMetaObject :: phương pháp yêu cầu một tham số. Tôi không chắc những gì tôi cần phải vượt qua nó. –

1

Khám phá signal spying. Có một số hiểu biết sâu sắc về thư viện QT và theo dõi tín hiệu/khe.