Có khe curt qt không? Có lẽ có cái gì đó tương tự như curryng?khe qt currying
Trả lời
Bạn có thể sử dụng QSignalMapper để liên kết kết nối một số tín hiệu với nó và sau đó kết nối các tín hiệu riêng của nó để nhắm mục tiêu các vị trí kèm theo một số tham số.
// connect signal to mapper
signalMapper = new QSignalMapper(this);
signalMapper->setMapping(button1, QString("param1"));
signalMapper->setMapping(button2, QString("param2"));
connect(button1, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(button2, SIGNAL(clicked()), signalMapper, SLOT(map()));
// connect mapper signal to slot
connect(signalMapper, SIGNAL(mapped(const QString &)), this, SLOT(originalSlot(const QString &)));
Tôi nghĩ rằng lệnh 'connect' thứ hai sẽ nói 'button2', không phải' button1'. Tôi đoán đó là phép thuật có thể làm cho kỹ thuật này hữu ích: để người lập bản đồ tín hiệu phản ứng khác với những người gửi duy nhất. – Wyck
Đối số ràng buộc không thể sử dụng tín hiệu/khe Qt. Bạn sẽ phải sử dụng boost :: signal và boost :: bind thay vì để đạt được chức năng như vậy.
LibQxt cũng là một tùy chọn, hãy xem câu trả lời của tôi. –
Mặc dù không thể trực tiếp sử dụng Qt, một số ràng buộc/currying có sẵn thông qua LibQxt. Ví dụ và từ các tài liệu của QxtBoundFunction:
Cho đến nay, việc sử dụng dự kiến phổ biến nhất là để cung cấp một tham số để một khe khi tín hiệu không có lời đề nghị một. Nhiều nhà phát triển mới cho Qt cố gắng viết mã như thế này: \ code kết nối (nút, SIGNAL (đã nhấp()), lineEdit, SLOT (setText ("Xin chào, thế giới"))); \ endcode Nhà phát triển Qt có kinh nghiệm sẽ ngay lập tức phát hiện lỗ hổng ở đây. Giải pháp điển hình là tạo một khe bao bọc một dòng ngắn, gọi hàm mong muốn. Một số nhà phát triển thông minh thậm chí có thể sử dụng QSignalMapper để xử lý các vị trí chỉ cần một thông số int hoặc QString .
QxtBoundFunction phép câu lệnh kết nối trước đó được viết như thế này: \ đang Connect (nút, SIGNAL (nhấp()), QxtMetaObject :: bind (lineEdit, SLOT (setText (QString)), Q_ARG (QString , "Chào thế giới!"))); \ code Điều này hoàn thành cùng một kết quả mà không phải tạo một vị trí mới hoặc tệ hơn, toàn bộ đối tượng, chỉ để chuyển một giá trị không đổi.
Ngoài ra, thông qua việc sử dụng macro QXT_BIND, các tham số từ tín hiệu có thể được sắp xếp lại, bỏ qua hoặc truyền cùng với đối số liên tục được cung cấp với macro Q_ARG. Điều này có thể được sử dụng để cung cấp callbacks stateful cho một hàm số generic.
Nhiều loại chức năng có thể bị ràng buộc. Các ràng buộc phổ biến nhất áp dụng cho tín hiệu Qt và khe, nhưng chức năng C/C++ chuẩn cũng có thể bị ràng buộc. Phát triển trong tương lai có thể thêm khả năng liên kết với các hàm thành viên C++, và nhà phát triển có thể tạo các lớp con QxtBoundFunction tùy chỉnh để có thêm tính linh hoạt nếu cần.
Mặc dù tôi đã gửi một số bản vá lỗi cho LibQxt, tôi chưa sử dụng trực tiếp này để số dặm của bạn có thể thay đổi.
Tất nhiên, bây giờ chúng tôi có Qt 5 và khả năng kết nối tín hiệu vào các đối tượng có thể được gọi tùy ý:
connect(sender, &MyClass::mySignal, receiver, std::bind(&OtherClass::mySlot, boundArg));
connect(sender, &MyClass::mySignal, receiver, [=] { receiver->mySlot(boundArg); });
- 1. Gỡ lỗi tín hiệu Qt, khe và kết nối
- 2. Cách sử dụng enums trong tín hiệu và khe Qt
- 3. Qt sử dụng tăng :: shared_ptr trong tín hiệu/khe
- 4. Qt thực hiện tín hiệu và khe như thế nào?
- 5. Connect QML tín hiệu C++ 11 khe lambda (Qt 5)
- 6. Tín hiệu C++ vào khe QML trong Qt
- 7. currying trừ
- 8. Lỗi Groovy khi currying
- 9. Currying Functions Erlang
- 10. Piping, Composition and Currying
- 11. Xác định các tín hiệu được kết nối với một khe nhất định trong Qt
- 12. Bất kỳ ý tưởng nào để chạy tín hiệu/khe Qt qua mạng?
- 13. Tín hiệu Qt và Khe cắm được kết nối hai lần ... điều gì sẽ xảy ra?
- 14. Trong Qt (4.6), bạn có thể gọi trực tiếp các khe không?
- 15. PySide/Qt: Có quá nhiều đối số để kết nối tín hiệu với khe?
- 16. Tương tác tín hiệu/khe cắm cho hai plugin trong Qt
- 17. Qt Designer: Làm thế nào để loại bỏ khe từ thiết kế?
- 18. Sử dụng tín hiệu Qt và các khe có nhiều thừa kế
- 19. QT + Cách gọi khe từ mã C++ tùy chỉnh đang chạy trong một luồng khác
- 20. Làm thế nào để chuyển các biến vào các phương thức khe trong QT?
- 21. Sử dụng bất kỳ chức năng C++ nào như một khe Qt
- 22. Tín hiệu và khe của Qt có phải là dạng đăng ký-đăng ký không?
- 23. Kết nối tín hiệu với các khe có ít thông số được phép trong Qt?
- 24. Qt use-case cho cùng một tín hiệu đến 2 khe trên cùng một đối tượng?
- 25. Cách chuyển QString đến khe Qt từ QMenu qua QSignalMapper hoặc cách khác
- 26. Cách triển khai tín hiệu/khe được xác định trong Qt Designer
- 27. Currying ra lệnh trong Haskell
- 28. Nó có tạo sự khác biệt nào không, sử dụng các khe công cộng thay vì các khe riêng trong Qt?
- 29. Ứng dụng chức năng Haskell và currying
- 30. currying của 'loại linh hoạt trong F #
Bạn có thể xin vui lòng cho một ví dụ về những gì bạn có trong tâm trí? –
Có vẻ như một bản sao của http://stackoverflow.com/questions/3166051/binding-arguments-to-signals-slots –