2014-05-02 14 views
6

Tôi có thứ gì đó giống như thiết kế các lớp học sau đây và tôi tự hỏi liệu OK có sử dụng nhiều kết nối khe tín hiệu để giao tiếp giữa chúng hay không. Có một lớp MainWindow chứa tất cả GUI, sau đó là lớp Wrapper, cung cấp giao diện cho back-end, sau đó có một lớp Controller để tạo và quản lý luồng và cuối cùng có Worker s làm tất cả công việc.Có thể sử dụng tín hiệu và khe cắm chuỗi nhiều lần không?

Bây giờ, giả sử tôi đang tải tệp và muốn hiển thị tiến trình bằng thanh tiến trình trong MainWindow. Lớp Worker của tôi gửi updateProgress(int progress) tới Controller::handleProgress(int progress) vị trí sẽ gửi tín hiệu tiến trình đến lớp Wrapper, ngược lại sẽ gửi tín hiệu tiến trình đến cửa sổ chính, cuối cùng sẽ cập nhật thanh tiến trình.

Tương tự khi dữ liệu đã được tải, nó được xử lý trong lớp Wrapper và, một lần nữa, được truyền thông qua tín hiệu và khe (mặc dù với một bước ít hơn).

Đây có phải là cách làm tiêu chuẩn trong Qt hay tôi nên suy nghĩ lại về thiết kế của mình?

Trả lời

8

Đó là một khả năng hợp lệ.

Lưu ý rằng Qt cho phép bạn đi xa hơn nữa và làm như sau:

QObject::connect(&sender, SIGNAL(mySenderSignal(int)), 
       &receiver, SIGNAL(myReceiverSignal(int)); 

Đúng vậy, bạn có thể ràng buộc một tín hiệu đến một tín hiệu. Tất cả nó có thể được xem là "khi tín hiệu của người gửi được phát ra, phát ra tín hiệu của người nhận".

Nếu bạn không có bất kỳ tác vụ cụ thể nào để thực hiện trong các vị trí trung gian, điều đó có thể giúp bạn tiết kiệm một vài dòng, trong khi hiển thị chính xác những gì bạn đang làm: bạn đang "chuyển tiếp" tín hiệu. Nếu không, nếu bạn hoàn toàn phải làm việc ở giữa, thì bạn phải giữ các tín hiệu và các khe.

Lưu ý rằng bạn vẫn phải chắc chắn rằng các chữ ký tín hiệu khớp với nhau.

+0

Câu trả lời rất hay. – user2672165

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