Tôi có một số QStackedWidget
chứa một số trang đầy đủ các số khác nhau QLineEdit
và QComboBox
trẻ em. Tôi muốn phát ra tín hiệu bất cứ khi nào QStackedWidget
không còn có bất kỳ trẻ nào trẻ em có tiêu điểm (được cho là trẻ tập trung bắt đầu). Vì vậy, di chuyển từ trẻ em sang trẻ em sẽ không phát ra tín hiệu, nhưng khi một widget được chọn bên ngoài của QStackedWidget
, một tín hiệu được phát ra. Bất kỳ lời khuyên nào về cách thực hiện điều này? Tôi đã xem số InstallEventFilter
và QSignalMapper
, nhưng cả hai đều không phù hợp với nhu cầu của tôi. Lời khuyên nào sẽ được đánh giá cao.Tín hiệu phát ra nếu tất cả các tiện ích con bị mất tiêu điểm
Trả lời
Đây là một chút khó khăn. Ngay cả khi đạp xe từ trẻ em sang trẻ em, có một khoảng thời gian ngắn sau khi trẻ bị mất tập trung và trước khi một đứa trẻ khác tập trung mà không có trẻ em nào của tiện ích xếp chồng lên nhau tập trung. Mặc dù trạng thái này cực kỳ ngắn ngủi, nhưng đó là vấn đề thực tế. Tùy chọn duy nhất tôi có thể thấy là quyết định khoảng thời gian giữa một tiện ích con bị mất tiêu điểm và không có tiện ích con nào lấy tiêu điểm bạn sẽ coi là đủ dài để tuyên bố rằng, không có tiện ích con nào tập trung nữa. Đây sẽ là một cơ chế tương tự như những gì được sử dụng để phân biệt hai lần nhấp chuột duy nhất từ một cú nhấp đúp.
Điều này có thể đạt được bằng cách sử dụng bộ hẹn giờ và bộ lọc sự kiện trong phụ huynh đã đăng ký với từng trẻ, sẽ tìm kiếm sự kiện lấy nét và tham gia. Đặt hẹn giờ cho một khoảng thời gian (100 ms?) Và khởi động nó bất cứ khi nào một sự kiện lấy nét được nhận. Nếu bạn nhận được tiêu điểm trong sự kiện trong khi bộ hẹn giờ vẫn đang chạy, hãy ngừng bộ hẹn giờ. Nếu bộ hẹn giờ hoàn tất, bạn có thể kích hoạt tín hiệu của riêng mình để cho biết rằng không có tiện ích con nào được tập trung.
Bạn có thể kết nối với tín hiệu QApplication :: focusChanged để đánh giá các tiện ích tiêu điểm trong một vị trí tương ứng. Cách sạch để làm điều này là xuất phát từ QStackedWidget:
class StackedFocusWidget : public QStackedWidget {
Q_OBJECT
public:
StackedFocusWidget(QWidget *parent = 0) : QStackedWidget(parent) {
connect(qApp, SIGNAL(focusChanged(QWidget *, QWidget *)), this, SLOT(onFocusChanged(QWidget *, QWidget *)));
}
private slots:
void onFocusChanged(QWidget *old, QWidget *now) {
bool focusOld = old != 0 && isAncestorOf(old);
bool focusNow = now != 0 && isAncestorOf(now);
if (!focusOld && focusNow) {
emit gotFocus();
} else if (focusOld && !focusNow) {
emit lostFocus();
}
}
signals:
void gotFocus();
void lostFocus();
};
Các tín hiệu StackedFocusWidget :: GotFocus và StackedFocusWidget :: lostFocus sẽ được phát ra bất cứ khi nào widget xếp chồng lên nhau hoặc bất kỳ Childs của nó nhận được hoặc mất tập trung.
- 1. Tín hiệu khi một tiện ích mất tiêu điểm là gì?
- 2. wxPython: Làm cách nào để tìm ra tiện ích con nào có tiêu điểm?
- 3. Ngăn chặn LostFocus bị kích hoạt khi các phần tử con bị mất tiêu điểm
- 4. Qt QNetworkAccessManager không phát ra tín hiệu
- 5. Dễ dàng sử dụng các tiện ích con bị cô lập trên đường ray
- 6. Textmate2 lưu trên tiêu điểm bị mất
- 7. tải tất cả các tiện ích con bên trong một phần tử
- 8. Qt: Cập nhật các tiện ích con bị ẩn trước khi chúng được hiển thị?
- 9. Nhận thông báo/sự kiện/tín hiệu khi tiện ích Qt được lấy nét
- 10. Làm cách nào để đặt tiêu điểm cho tiện ích con nút theo lập trình?
- 11. Qt buộc QCheckBox phát ra tín hiệu trên setChecked
- 12. Kiểm tra xem cửa sổ có bị mất tiêu điểm
- 13. Cách phát hiện khi nào một hình ảnh bị mất tiêu điểm?
- 14. cách bỏ chọn tất cả các tùy chọn trong tiện ích đa lựa chọn
- 15. AutoCompleteTextView vấn đề về tiêu điểm bị mất
- 16. Tiện ích Qt với kích thước tối thiểu để phù hợp với tất cả nội dung
- 17. phát ra std :: chuỗi với tín hiệu qt
- 18. Inline Ckeditor: Tất cả các nút bị vô hiệu hóa
- 19. Ẩn bàn phím khi bị mất tiêu điểm khỏi UISearchBar
- 20. PHP forking và nhiều tín hiệu con
- 21. Tiện ích con chuck norris twitter đang mất phong cách trên IE
- 22. Tiện ích mở rộng ký hiệu có ký hiệu dài
- 23. Cách nhận tiện ích người gửi bằng cơ chế tín hiệu/khe?
- 24. GWT có tiện ích con Đoạn không?
- 25. Điểm hủy trong trình xử lý tín hiệu?
- 26. Cài đặt Tiện ích mở rộng PostgreSQL cho tất cả các lược đồ
- 27. 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?
- 28. C++ truy cập các tiện ích con từ một hàm
- 29. Sự kiện thả xuống jQuery UI của tiện ích con có thể bị bắn hai lần
- 30. MacOS và F6 khiến cửa sổ thực bị mất tiêu điểm
Điều này làm việc hoàn hảo, cảm ơn bạn! – Jmbryan10