2011-10-27 26 views
5

Tôi có một tiện ích tùy chỉnh để mô phỏng các mẹo bóng. Để được hiển thị đúng cách, tiện ích phụ thuộc vào thuộc tính QWidget Qt::WA_TranslucentBackground. Ứng dụng của tôi sẽ hoạt động trên tất cả các nền tảng chính (Windows XP, Windows 7, Linux, Mac), vì vậy tôi lo lắng một chút: Thuộc tính này có sẵn trên tất cả các nền tảng chính không? Nếu không, tôi có thể truy vấn nếu nó được? testAttribute() không làm điều đó. Nó chỉ trả về cho dù thuộc tính đã được thiết lập, không cho dù thiết lập nó có hiệu lực.Qt :: WA_TranslucentBackground có sẵn ở mọi nơi?

Trả lời

6

Điều này sẽ hoạt động với ngoại lệ duy nhất của Linux trên X11 khi cấu hình này không được hỗ trợ ARGB. Tham khảo tài liệu QWidget:

Tạo mờ của Windows

Kể từ khi Qt 4.5, nó đã có thể tạo ra các cửa sổ với mờ vùng trên các hệ thống cửa sổ hỗ trợ compositing.

Để kích hoạt tính năng này trong một widget cấp cao nhất, thiết lập của nó Qt :: WA_TranslucentBackground thuộc tính với setAttribute() và đảm bảo rằng nền của nó được sơn với màu sắc không đục ở các vùng bạn muốn trở thành một phần trong suốt .

vBulletin ghi chú:

X11: Tính năng này dựa trên việc sử dụng một máy chủ X có hỗ trợ hình ảnh ARGB và một quản lý cửa sổ hợp lại.

Windows: Tiện ích con cần có cờ cửa sổ Qt :: FramelessWindowHint được đặt để làm mờ.

Cân nhắc đọc đoạn văn có tiêu đề "Minh bạch và đệm đôi", có thể thú vị.

+0

Mức độ phổ biến hay hiếm đối với một Linux hiện đại không hỗ trợ ARGB? Tôi có thể bằng cách nào đó truy vấn nó? –

+0

Tôi không nghĩ rằng bạn sẽ có vấn đề với điều đó với phần cứng/bản phân phối gần đây. Dù sao, bạn sẽ nhận được thông tin bằng cách sử dụng xdpyinfo hoặc xem tập tin cấu hình xorg.conf. Bạn có thể có một số vấn đề với hệ thống Linux nhúng có thể. Điều này cung cấp thêm điều gì đó: http://stackoverflow.com/questions/2434511/what-pixel-format-does-x-server-use. –

7

Đối với Linux, bạn nên kiểm tra xem compositing được kích hoạt:

bool QX11Info::isCompositingManagerRunning() [static] 

ví dụ

#ifdef Q_WS_X11 
    if(QX11Info::isCompositingManagerRunning()) 
     setAttribute(Qt::WA_TranslucentBackground); 
#endif 

Câu hỏi này cũ, nhưng điều này có thể giúp ai đó.

+1

Và, đối với bất kỳ ai lang thang ngoài Google, nếu bạn thấy mình cần hỗ trợ máy tính để bàn không được tổng hợp cho một thứ như OSD tròn hoặc cửa sổ bật lên tiếng nói, Qt [ShapedClock] (https://doc.qt.io/ Ví dụ qt-5/qtwidgets-widgets-shapedclock-example.html) minh họa cách sử dụng 'setMask' để tạo ra một cửa sổ không vuông mà không cần kết hợp. – ssokolow

+0

Lưu ý rằng đôi khi để có được 'Qt :: WA_TranslucentBackground' để làm việc trong linux mà không có' setMask', bạn cũng phải kích hoạt thêm một vài thuộc tính và một cờ cửa sổ. https://stackoverflow.com/a/30596357/999943 – phyatt

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