2010-01-08 32 views
5

Tôi là tổng số người mới tham gia Qt. Khi tôi đang đọc số documentation, tôi bắt gặp cấu hình này:Qt use-case cho cùng một tín hiệu đến 2 khe trên cùng một đối tượng?

connect(Object1, Signal1, Object2, slot1) 
connect(Object1, Signal1, Object2, slot2) 

Điều gì có thể là trường hợp sử dụng cho điều này?

Có vẻ lạ với tôi đến từ nền Erlang/Python. Nó phải làm với C + + kế thừa xoắn và biến tôi đoán.

Trả lời

4

Đây là trường hợp khi bạn có một cái gì đó giống như một nút thay đổi hai phần của nhau. Nó có thể âm thanh ngớ ngẩn, nhưng nó sẽ tương đương với việc gọi chức năng khe thứ hai từ khe đầu tiên.

Nói, nhấp vào nút phát/tạm dừng làm nút dừng hoạt động hoặc đang hoạt động và cũng thay đổi mẹo công cụ. Điều này có thể dễ dàng được thực hiện với một vị trí, nhưng bạn có thể muốn tùy chọn thực hiện chúng một cách độc lập vào các thời điểm khác. Để thúc đẩy tái sử dụng, bạn sử dụng phương pháp trên để kết nối một tín hiệu với 2 vị trí.

+0

Cảm ơn Adam. Trông ngớ ngẩn với tôi mặc dù: Tôi sẽ thúc đẩy một trừu tượng nơi mà emitter của tín hiệu không cần phải quan tâm những gì cần phải xảy ra ở phía bồn rửa chén. – jldupont

+0

@jldupont: Bộ phát tín hiệu không phải quan tâm đến những gì cần xảy ra ở phía bồn rửa. Nó chỉ phát ra tín hiệu và tiếp tục với nhiệm vụ của nó. Người tạo kết nối không phải là bộ phát, kết nối có thể được thực hiện tốt bởi bồn rửa, hoặc thậm chí bởi một bên thứ ba (nếu tín hiệu và các khe được công khai). – Fred

+0

Để tiếp tục với những gì Fred nói, tôi hầu như luôn tìm thấy trường hợp bồn rửa có kết nối (trực tiếp hoặc thông qua proxy). Có một nguồn mà biết tất cả các bồn trực tiếp phần nào đánh bại mục đích. Và như Fred đã nói, hãy nhớ rằng bất cứ điều gì phát ra tín hiệu không quan tâm ai nhận được nó. Tuy nhiên nó có thể chạy mã vùng trước khi nó tiếp tục tùy thuộc vào loại kết nối và luồng. –

3

Nó sẽ cho phép các đối tượng khác kích hoạt slot1 và slot2 riêng biệt.

connect(Object1, Signal1, Object2, slot1); 
connect(Object1, Signal1, Object2, slot2); 
connect(Object3, Signal1, Object2, slot1); 
connect(Object4, Signal1, Object2, slot2); 
0

Nó thực sự là một cách thực sự mạnh mẽ làm MVC ... Hãy nói rằng bạn muốn "kết nối" quan điểm để nghe một đối tượng hơn phát ra dữ liệu ngay ...

Bạn có thể kết nối một cái nhìn PieChart với :

connect(MySourceModel, SIGNAL(newDataAreThere()), PieChartView, SLOT(notifyNewDataReceived())); 

Sau đó trong ứng dụng của bạn, mô-đun khác được tạo ra và cần cũng như để lắng nghe dữ liệu ... Không có vấn đề:

connect(MySourceModel, SIGNAL(newDataAreThere()), AnotherView, SLOT(notifyNewDataReceived())); 

Bạn có thể kết nối/ngắt kết nối quan điểm của bạn, và mô hình thậm chí không biết ai đang nghe mình ... Đó không phải là vấn đề của mình ...

Tôi hy vọng ví dụ nhỏ của tôi là dễ hiểu;)

+0

cảm ơn vì đóng góp của bạn ** nhưng ** điều này đã đọc kỹ câu hỏi chưa? – jldupont

+0

Oups, vâng, tôi đọc một chút quá nhanh câu hỏi của bạn ... Xin lỗi! –

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