Dường như đây là một chủ đề cũ. Tuy nhiên, tôi không thấy ai đăng một câu trả lời thích hợp mà chỉ hoạt động, vì vậy tôi đang đăng giải pháp của mình cho cùng một vấn đề mà tôi đã gặp phải gần đây.
Trước hết, nếu bạn muốn hộp thoại không lấy cắp tiêu điểm từ các hộp thoại hoặc trường nhập khác, bạn nên đặt thuộc tính sau: Qt :: WA_ShowWithoutActivating. Sử dụng thuộc tính này, cửa sổ (hộp thoại cũng là một cửa sổ) sẽ được hiển thị mà không được kích hoạt. Sau đó, có lẽ bạn sẽ muốn tùy chỉnh hộp thoại của bạn theo nhu cầu của bạn, và bạn sẽ muốn hộp thoại này được hiển thị trên đầu trang. Vì vậy, các cờ cửa sổ sau đây có thể được thiết lập để đạt được kết quả như vậy trong một cách đa nền tảng: Qt :: FramelessWindowHint | Qt :: NoDropShadowWindowHint | Qt :: X11BypassWindowManagerHint | Qt :: Công cụ | Qt :: WindowStaysOnTopHint | Qt :: WindowTransparentForInput | Qt :: WindowDoesNotAcceptFocus.
Đoạn code dưới đây là một trong những ví dụ để đạt được một hộp thoại đó là modeless, và không ăn cắp tập trung từ bất cứ ai (giả sử thoại là một trỏ biến để thể hiện giá trị của QDialog):
dialog->setAttribute(Qt::WA_ShowWithoutActivating, true);
dialog->setWindowFlags(dialog.windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | Qt::X11BypassWindowManagerHint | Qt::Tool | Qt::WindowStaysOnTopHint | Qt::WindowTransparentForInput | Qt::WindowDoesNotAcceptFocus);
Nguồn
2018-02-26 08:56:01
Đúng nếu tôi sai, nhưng điều này chỉ làm cho cửa sổ hoạt động độc lập với cha mẹ của nó. Nó vẫn sẽ không ở trên đầu khi người dùng ALT + TAB. – Pieter
Một QDialog là một cửa sổ cấp cao nhất. Bạn có thể sử dụng chức năng 'nâng cao 'nếu bạn muốn đảm bảo rằng nó sẽ ở trên cùng của ngăn xếp của tiện ích con. Sử dụng 'show', hộp thoại sẽ hiển thị và bạn sẽ có thể tương tác với các cửa sổ khác của ứng dụng. Nếu bạn muốn hiển thị hộp thoại trong suốt ứng dụng thì bạn có thể đặt cửa sổ chính làm cha mẹ của nó. Tôi không chắc chắn những gì xảy ra với ALT + TABs – pnezis
Khi người dùng nhấn ALT + TAB (hoặc tập trung vào một cửa sổ toàn màn hình), QDialog không còn trên đầu trang của các cửa sổ khác. Đây không phải là hành vi mong muốn đối với thông báo [MSN Messenger-like] (http://www.donkhuth.com/wp-content/uploads/2007/01/saosang.jpg) giống như thông báo tôi đang cố gắng đạt được. – Pieter