2012-06-30 46 views
6

Bằng cách đọc this, hai câu hỏi đưa ra:PyQt4 @pyqtSlot: kwarg kết quả là gì?

1. Nó nói

nó là đôi khi cần thiết để đánh dấu một cách rõ ràng phương pháp Python như là một khe cắm Qt

Trong khi tôi luôn sử dụng trình trang trí @pyqtSlot vì nó cho biết:

Conne cting một tín hiệu cho một phương pháp Python trang trí cũng có lợi thế giảm số lượng bộ nhớ được sử dụng và nhanh hơn một chút

Tôi tự hỏi: trong trường hợp cụ thể nào là cần thiết? và: Có lợi thế nào khi không sử dụng trình trang trí @pyqtSlot không?

2. Đối số từ khóa kết quả, mục đích của nó là gì?

@pyqtSlot(int, result=int) 
def foo(self, arg1): 
    """ C++: int foo(int) """ 

Có vẻ như kiểu giá trị trả về, nhưng AFAIK bạn không thể truy xuất giá trị trả lại khi phát tín hiệu.

Bất kỳ ý tưởng nào về điều đó?

Trả lời

6
  1. Nó nhanh hơn vì kiến ​​trúc PyQt. PyQt chuyển đổi các khe trăn thành các khe C++, để giao tiếp với khung Qt. Khi bạn đánh dấu rõ ràng một phương thức Python là một khe Qt và cung cấp một chữ ký C++ cho nó, mã PyQt không phải đoán chính chữ ký C++, vì nó đã được chỉ định. Điều này có thể nâng cao hiệu suất cho các dự án nặng.

  2. Giá trị trả lại chỉ cần thiết khi bạn muốn gọi vị trí làm chức năng bình thường.

Sửa: Có vẻ như rằng phương pháp QMetaObject.invokeMethod thực hiện một khe cắm và sử dụng nó là giá trị trả về.

+0

Điều đó có ý nghĩa, cảm ơn! Vì vậy, tôi cho rằng không có lợi thế là không sử dụng trang trí, tức là ? – Pedru

+0

sử dụng nó trên các khe được sử dụng nhiều. Nếu đó là một khe cơ bản mà không làm nhiều và không được gọi là nhiều, không có nhu cầu trong trang trí. Nó tăng cường kịch bản một chút, nhưng nó sẽ không được chú ý trên các chức năng đơn giản. – iTayb

+0

OK, vì vậy tôi sẽ nói, luôn sử dụng nó vì nó tăng cường khả năng đọc mã (với làm nổi bật cú pháp) – Pedru

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