{"id":406861,"date":"2024-06-29T19:11:36","date_gmt":"2024-06-29T19:11:36","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=406861"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T19:11:36","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=406861","title":{"rendered":"<span>Blur Behind: \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0432\u0430\u043b\u043e\u0432 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u0421<\/span>"},"content":{"rendered":"<div><!--[--><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/vk.com\/rtrg?p=VK-RTRG-1297426-bEGLU&amp;event=habr_workspace\" style=\"display:none;\" width=\"1\"><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/dj\/if\/xx\/djifxxayoibafqtgg_a7y5vbwas.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/dj\/if\/xx\/djifxxayoibafqtgg_a7y5vbwas.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0445\u0430\u0438\u043b \u041f\u043e\u043b\u0443\u043a\u0430\u0440\u043e\u0432, \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 Desktop-\u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0443\u043f\u0435\u0440\u0430\u043f\u043f\u0430 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435<a href=\"https:\/\/teams.vk.com\/\"> VK Teams<\/a>. \u042f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u0425\u0430\u0431\u0440 \u0434\u0432\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0445 \u043e\u043a\u043e\u043d \u0438 \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0441\u043f\u0435\u0446\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Qt Framework: \u0432\u043e\u0442 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/691200\/\">\u043f\u0435\u0440\u0432\u0430\u044f<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/701382\/\">\u0432\u0442\u043e\u0440\u0430\u044f<\/a>. \u041f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0430\u043c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0443\u0434\u0430\u0447, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0435\u0446\u044d\u0444\u0444\u0435\u043a\u0442\u0430 Blur Behind \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u0421.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/h2>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 1.<\/b> \u0412\u0441\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e-\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f, \u0432\u0435\u0440\u0441\u0438\u0438 Qt Framework, \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0442\u0438\u043f\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432. \u0412\u0435\u0441\u044c \u043a\u043e\u0434, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u0434\u043b\u044f Qt Framework \u0432\u0435\u0440\u0441\u0438\u0438 5.14.1 \u0432 \u041e\u0421 Windows 10, Ubuntu 20.1 LTS Linux \u0438 macOS Big Sur. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u043a\u043b\u0430\u0441\u0441\u0435, \u0430 \u0432 Production-\u043a\u043e\u0434\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430<a href=\"https:\/\/github.com\/progzdeveloper\/HabrQtDemos\"> \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 GitHub<\/a>. \u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Qt Framework \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0421++17.<\/p>\n<p>  <b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 2.<\/b> \u0412\u0441\u0435, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Qt QML \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432. \u041e\u0441\u043e\u0431\u043e \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043c\u043e\u044f \u0446\u0435\u043b\u044c \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Qt Framework \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e QWidget-based-\u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/p>\n<h2>\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e Blur Behind<\/h2>\n<p>  <i>Blur Behind<\/i> (\u0438\u043b\u0438 Back Drop) \u2014 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u044d\u0444\u0444\u0435\u043a\u0442, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0438 \u0444\u043e\u043d\u0430 \u043f\u043e\u0434 \u043e\u043a\u043d\u043e\u043c \u0438\u043b\u0438 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043e\u043a\u043d\u0430, \u043d\u0430\u043c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043a\u043e\u0434. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445. \u0414\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f (\u0440\u0435\u0433\u0438\u043e\u043d \u043f\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0440\u0435\u0433\u0438\u043e\u043d \u0432 \u0441\u0430\u043c\u043e\u043c \u043e\u043a\u043d\u0435, \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 \u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u044d\u0442\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u0439 \u041e\u0421. \u0412 Linux, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 Composition Manager, \u0432 Windows \u2014 Desktop Window Manager (DWM). \u0414\u043b\u044f macOS \u0442\u0430\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u044b\u043c API, \u0434\u043b\u044f Windows (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Windows 8) \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f Linux \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 KDE, \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 (Xfce, GNOME \u0438 \u043f\u0440\u043e\u0447\u0438\u0445) \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0432\u0441\u0435. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 Blur Behind \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e API \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e<a href=\"https:\/\/notes.yvt.jp\/Desktop-Apps\/Enabling-Backdrop-Blur\/\"> \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>  VK Teams \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u041e\u0421 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445. \u0418\u0437-\u0437\u0430 \u044d\u0442\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u043c\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u043d\u0430 \u0432\u0441\u0435\u043c \u043e\u043a\u043d\u0435 \u0438 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>QGraphicsEffect<\/code> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043c\u0435\u0436\u0434\u0443 <b>\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c\u0438<\/b> \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u043e\u043a\u043d\u0430. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/701382\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<p>  \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u043a\u043d\u0430. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441 Linux, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u044d\u0442\u043e\u0439 \u041e\u0421 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0443\u0434\u043d\u044b\u043c.<\/p>\n<h2>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 Blur Behind \u0434\u043b\u044f Linux<\/h2>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0430\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e KDE, \u0441\u043f\u0435\u0440\u0432\u0430 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043a\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 KDE, \u0442\u043e \u0434\u043b\u044f \u043e\u043a\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0442\u043e\u043c <code>_KDE_NET_WM_BLUR_BEHIND_REGION<\/code>, \u0447\u0442\u043e \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0434\u0440\u0443\u0433\u0430\u044f \u043e\u043a\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 GNOME, \u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043e\u043a\u043e\u043d \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<blockquote><p>UPD: \u043f\u043e\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0430\u0441\u044c \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f, \u0432\u044b\u0448\u043b\u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u2014 GNOME 4, \u0433\u0434\u0435 \u0442\u0430\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p><\/blockquote>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u043e\u043a\u043d\u043e, \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430, \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043e\u043a\u043d\u0430, \u0440\u0430\u0437\u043c\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u043e, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0432 \u0440\u0430\u0437\u043c\u044b\u0442\u0443\u044e \u0447\u0430\u0441\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u044f\u0441\u043d\u043e, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440. \u0415\u0441\u043b\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0447\u0430\u0441\u0442\u043e, \u043c\u044b \u043d\u0435 \u0443\u0441\u043f\u0435\u0435\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u044e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043a\u0430\u044f. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0442\u0430\u043a\u0442\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u0442\u0430\u043a \u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u0438\u0434\u0435\u043e\u043f\u0430\u043c\u044f\u0442\u0438, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u043c, \u2014 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 Composition Manager. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u0432 \u0432\u0438\u0434\u0435 QPixmap \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 \u043d\u0430\u0448\u0435 \u043e\u043a\u043d\u043e, \u0430 \u043e\u0431\u0449\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<ol>\n<li>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443 X11 \u0432\u0441\u0435 \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043e\u043a\u043d\u0430 \u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0438\u0445 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044f \u043e\u0441\u0438 Z \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u043a\u043d\u0430.  <\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u043a\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u043a\u043d\u0430 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u043d\u0430\u0448\u0435\u043c\u0443, \u0438\u043d\u0430\u0447\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0446\u0438\u043a\u043b.  <\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u043a\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d\u0430 \u0441 \u043d\u0430\u0448\u0438\u043c \u043e\u043a\u043d\u043e\u043c.  <\/li>\n<li>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f.  <\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u043a\u043d\u0430 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u043e\u043d\u0435.  <\/li>\n<li>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0432 \u0431\u0443\u0444\u0435\u0440 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f.  <\/li>\n<\/ol>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0430\u043a\u0442\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0443\u0436\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u043a\u043d\u0430 \u0432 <code>paintEvent()<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043c\u044b\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.\u00a0<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0438\u0434\u0435\u0438 \u0432 \u043a\u043e\u0434\u0435. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u043a\u043d\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cpp\">struct WindowFunctions {     static WId leaderWindow(WId w);     static bool isVisible(WId w);     static QRect windowGeometry(WId w);     static QImage windowImage(WId w, const QRect&amp; rect);     static QImage grabRootImage(const QRect&amp; r = {}); }; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430:<\/p>\n<pre><code class=\"cpp\">class ExternalWindowHandler : public WindowFunctions { public:     virtual ~ExternalWindowHandler() {}     virtual bool processWindow(WId w) = 0; }; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 X11, \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0442\u043e\u043d\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 Xcb. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043a\u043e\u043d\u043d\u044b\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441 <code>XcbWindowManager<\/code> \u2014 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u043a\u043e\u043d. \u041f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u043a\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0435\u0433\u0430\u0442 <code>ExternalWindowHandler<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u043e\u043a\u043d\u043e. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>ExternalWindowHandler<\/code> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0442 <code>WindowFunctions<\/code>, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043e\u043a\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 <code>XcbWindowManager<\/code>, \u0432\u043e\u0442 \u0435\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">class XcbWindowManager {     Q_DISABLE_COPY(XcbWindowManager)     XcbWindowManager(); public:     struct cdeleter     {         void operator()(void* _ptr) const { free(_ptr); }     };     template&lt;class T>     using cmem_ptr = std::unique_ptr&lt;T, cdeleter>;     static XcbWindowManager&amp; instance();     xcb_connection_t* xcb() const;     xcb_window_t leaderWindow(xcb_window_t _w);     bool isVisible(xcb_window_t _w);     QRect geometry(xcb_window_t _w) const;     QImage image(xcb_window_t _w, const QRect&amp; rect) const;     void traverseWindows(ExternalWindowHandler* handler); private:     bool processWindow(xcb_window_t w, ExternalWindowHandler *handler); private:     xcb_connection_t* mConn_; }; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0443\u043c\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c-\u043e\u0431\u0435\u0440\u0442\u043a\u0430, \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0439 \u043f\u0430\u043c\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>free()<\/code>. \u042d\u0442\u0430 \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u0443\u0434\u043e\u0431\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 XCB, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 <code>free()<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0421\u043f\u0435\u0440\u0432\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c X11.<\/p>\n<pre><code class=\"cpp\">XcbWindowManager::XcbWindowManager() {     \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c XCB-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Qt     mConn_ = QX11Info::connection();     if (mConn_ == nullptr)      {         qCritical(\"xcb connection failed\");         return;     } } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">xcb_window_t XcbWindowManager::leaderWindow(xcb_window_t _w) {     for (;;)     {         xcb_query_tree_cookie_t cookie = xcb_query_tree(mConn_, _w);         cmem_ptr&lt;xcb_query_tree_reply_t> reply(xcb_query_tree_reply(mConn_, cookie, NULL));         if (!reply)             break;         if (reply->parent == XCB_WINDOW_NONE || reply->parent == reply->root)             break;         _w = reply->parent;     }     return _w; } bool XcbWindowManager::isVisible(xcb_window_t _w) {     if (!mConn_)         return false;     cmem_ptr&lt;xcb_get_window_attributes_reply_t> attribs(xcb_get_window_attributes_reply(mConn_, xcb_get_window_attributes(mConn_, _w), nullptr));     if (!attribs)         return false;     return attribs->_class == XCB_WINDOW_CLASS_INPUT_OUTPUT &amp;&amp;            attribs->map_state == XCB_MAP_STATE_VIEWABLE; } QRect XcbWindowManager::geometry(xcb_window_t _w) const {     if (!mConn_)         return QRect{};     QRect windowRect;     cmem_ptr&lt;xcb_get_geometry_reply_t> geometry(xcb_get_geometry_reply(mConn_, xcb_get_geometry(mConn_, _w), nullptr));     if (geometry)         windowRect.setRect(geometry->x, geometry->y, geometry->width, geometry->height);     return windowRect; } QImage XcbWindowManager::image(xcb_window_t _w, const QRect &amp;rect) const {     auto img_cookie = xcb_get_image(         mConn_, XCB_IMAGE_FORMAT_Z_PIXMAP,         _w, rect.x(), rect.y(), rect.width(), rect.height(), static_cast&lt;uint32_t>(~0)     );     cmem_ptr&lt;xcb_get_image_reply_t> xcbimg(xcb_get_image_reply(mConn_,img_cookie, nullptr));     if (xcbimg)     {         const uchar* imgData = xcb_get_image_data(xcbimg.get());         QImage image(imgData, rect.width(), rect.height(), QImage::Format_ARGB32);         image.detach();         return image;     }     return QImage{}; } <\/code><\/pre>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430, \u043d\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a XCB. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <code>XcbWindowManager::leaderWindow()<\/code>, <code>XcbWindowManager::isVisible()<\/code> \u0438 <code>XcbWindowManager ::image()<\/code>.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>leaderWindow()<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u043a\u043d\u0430. \u0414\u0435\u043b\u043e \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043a\u043e\u043d \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0432 Qt. \u0415\u0441\u043b\u0438 \u0443 Qt-\u043e\u043a\u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0440\u0430\u043c\u043a\u0430 (\u0430 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e), \u0442\u043e \u043f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u0432\u0441\u0435\u0445 \u043e\u043a\u043e\u043d \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0448\u0435. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <code>QWidget::winId()<\/code> \u0438 <code>QWidget::effectiveWinId()<\/code>: \u043e\u043d\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 WId \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u043e\u043a\u043d\u0430, \u0430 \u043d\u0435 \u0440\u0430\u043c\u043a\u0438, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u043e\u043a\u043e\u043d \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f WId \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u043c\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0430\u0448\u0435 \u043e\u043a\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c WId \u0435\u0433\u043e \u0440\u0430\u043c\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 XCB \u0434\u0435\u0440\u0435\u0432\u043e \u043e\u043a\u043e\u043d, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442 \u0445\u0435\u043d\u0434\u043b\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442 <code>QWidget::effectiveWinId()<\/code>, \u0438 \u043f\u043e\u0439\u0442\u0438 <b>\u0432\u0432\u0435\u0440\u0445<\/b> \u043f\u043e \u0434\u0435\u0440\u0435\u0432\u0443, \u0430 \u043d\u0435 \u0432\u043d\u0438\u0437. \u0422\u0430\u043a \u043c\u044b \u043b\u0438\u0431\u043e \u043d\u0430\u0439\u0434\u0435\u043c \u0440\u0430\u043c\u043a\u0443, \u043b\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 \u0435\u0435 \u043d\u0435\u0442, \u0443\u043f\u0440\u0435\u043c\u0441\u044f \u0432 <code>XCB_WINDOW_NONE<\/code> \u0438\u043b\u0438 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0435\u0441\u043b\u0438 \u043b\u0438\u0448\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u0440\u0430\u043c\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>setWindowFlags(windowFlags() | Qt::FramelessWindowHint)<\/code>, \u0442\u043e <code>QWidget::effectiveWinId()<\/code> \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u043a\u043d\u0430, <b>\u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0439<\/b> \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>isVisible()<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u043e\u043a\u043d\u0430. \u041d\u043e \u0438 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e: \u043c\u043d\u0435 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u043e\u043a\u043d\u0430: \u043b\u0438\u0431\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u044b\u0435, \u043b\u0438\u0431\u043e, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435.<\/p>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <code>image()<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u043a\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f QImage. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 <code>detach()<\/code> \u0434\u043b\u044f QImage. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 QImage \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u043e\u0447\u043d\u0435\u0435, \u0441 Dangling Pointer \u043d\u0430 \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 Segfault \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a QImage.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0432\u0441\u0435\u0445 \u043e\u043a\u043e\u043d:<\/p>\n<pre><code class=\"cpp\">void XcbWindowManager::traverseWindows(ExternalWindowHandler *handler) {     xcb_window_t root = xcb_setup_roots_iterator(xcb_get_setup(mConn_)).data->root;     xcb_window_t* children;     \/* \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043e\u043a\u043d\u0430, \u0447\u044c\u0438\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 *\/     cmem_ptr&lt;xcb_query_tree_reply_t> reply(xcb_query_tree_reply(mConn_, xcb_query_tree(mConn_, root), nullptr));     if (!reply)         return;     \/* \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 *\/     const int len = xcb_query_tree_children_length(reply.get());     if (len &lt; 1)         return;     \/* \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u043a\u043e\u043d *\/     children = xcb_query_tree_children(reply.get());     if (!children)         return;     for (int i = 0; i &lt; len; ++i)     {         auto w = children[i];         if (processWindow(w, handler))             break;     } }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043c\u044b:<\/p>\n<ol>\n<li>\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043e\u043a\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430.\u00a0  <\/li>\n<li>\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u043a\u043e\u043d, \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u0434\u043b\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e, \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>xcb_query_tree_reply()<\/code>.\u00a0  <\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043a\u043e\u043d \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>xcb_query_tree_children_length()<\/code>.  <\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043e\u043a\u043e\u043d \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>xcb_query_tree_children()<\/code>.\u00a0  <\/li>\n<\/ol>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0443\u0436\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e \u043e\u0441\u0438 Z. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u043e\u043a\u043d\u0430 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u043e\u043a\u043d\u0430 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u043e\u0441\u0438 Z, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0445\u043e\u0434\u0430 \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439. \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b: \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>processWindow()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u043a\u043d\u0430. \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u0435\u0440\u043d\u0443\u043b <code>true<\/code>, \u0442\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u043c \u0446\u0438\u043a\u043b.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043e\u0431\u0445\u043e\u0434\u0430 \u0432\u0441\u0435\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u043a\u043e\u043d \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438\u0437 \u0442\u0435\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u043a\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u0441 \u043d\u0430\u0448\u0438\u043c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0431\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e \u043e\u0441\u0438 Z, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0431\u0445\u043e\u0434, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441 \u043d\u0430\u0448\u0438\u043c \u043e\u043a\u043d\u043e\u043c.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f\u0445 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043e\u043a\u043d\u0430, \u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u0440\u043e \u0441\u0430\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u2014 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0443\u0447\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438<a href=\"https:\/\/hamberg.no\/erlend\/posts\/2011-01-06-read-current-x-background-to-jpeg.html\"> \u0437\u0434\u0435\u0441\u044c<\/a>. \u041f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u0434, \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441 Qt:<\/p>\n<pre><code class=\"cpp\">QImage XcbWindowManager::grabRootImage(const QRect &amp;r) const {     if (!mConn_)         return QImage{};     xcb_window_t root = xcb_setup_roots_iterator(xcb_get_setup(mConn_)).data->root;     xcb_intern_atom_cookie_t cookie = xcb_intern_atom(mConn_, 0, strlen(\"_XROOTPMAP_ID\"), \"_XROOTPMAP_ID\");     cmem_ptr&lt;xcb_intern_atom_reply_t> reply(xcb_intern_atom_reply(mConn_, cookie, 0));     if (!reply)         return QImage{};      const xcb_atom_t atom = reply->atom;      xcb_get_property_cookie_t image_cookie = xcb_get_property(mConn_, 0, root, atom, XCB_ATOM_PIXMAP, 0, 1);      cmem_ptr&lt;xcb_get_property_reply_t> image_reply(xcb_get_property_reply(mConn_, image_cookie, nullptr));      if (!image_reply)          return QImage{};      if (xcb_get_property_value_length(image_reply.get()) == 0)          return QImage{};      const QRect area = r.isValid() ? r : geometry(root);      xcb_drawable_t drawable = *(xcb_drawable_t*)xcb_get_property_value(image_reply.get());      auto img_cookie = xcb_get_image(          mConn_, XCB_IMAGE_FORMAT_Z_PIXMAP,          drawable, area.x(), area.y(), area.width(), area.height(), static_cast&lt;uint32_t>(~0)      );      cmem_ptr&lt;xcb_get_image_reply_t> xcbimg(xcb_get_image_reply(mConn_, img_cookie, nullptr));      if (xcbimg)      {          const uchar* imgData = xcb_get_image_data(xcbimg.get());          QImage image(imgData, area.width(), area.height(), QImage::Format_RGB32);          image.detach();          return image;      }      return QImage{}; } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u043e\u0442\u043e\u0432\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u043e\u043a\u043d\u043e \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c Blur Behind \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u043a\u043e\u043d.<\/p>\n<pre><code class=\"cpp\">class WindowCompositionHandler; class Widget : public QWidget {     Q_OBJECT public:     Widget(QWidget *parent = 0);     ~Widget();  private Q_SLOTS:     void compose();  protected:     void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;     void showEvent(QHideEvent *event) Q_DECL_OVERRIDE;     void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE;  private:     QPixmap pixmap;     QTimer* timer;     WindowCompositionHandler* compositor; }; <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u0437\u043d\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434 \u043d\u0430\u0448\u0438\u043c \u043e\u043a\u043d\u043e\u043c, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043e\u043a\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0432\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0443 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0444\u043e\u043d\u0430 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>Qt::WA_TranslucentBackground<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c. \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430\u0448 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438 \u0442\u0430\u0439\u043c\u0435\u0440. \u041f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 <code>showEvent()<\/code> \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0442\u0430\u0439\u043c\u0435\u0440, \u0430 \u043d\u0430 <code>hideEvent()<\/code> \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0435\u0441\u043b\u0438 \u043e\u043a\u043d\u043e \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e. \u0412\u043e\u0442 \u043a\u043e\u0434, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435:<\/p>\n<pre><code class=\"cpp\">Widget::Widget(QWidget *parent)     : QWidget(parent) {     setAttribute(Qt::WA_TranslucentBackground);     setAutoFillBackground(false);     compositor = new WindowCompositionHandler(this);     timer = new QTimer(this);     timer->setInterval(10);     connect(timer, &amp;QTimer::timeout, this, &amp;Widget::compose); }  Widget::~Widget() {     delete compositor; }  void Widget::hideEvent(QHideEvent *event) {     timer->stop();     QWidget::hideEvent(event); } void Widget::showEvent(QShowEvent *event) {     QWidget::showEvent(event);     timer->start(); } <\/code><\/pre>\n<p>  \u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u043a\u043d\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>Widget::compose()<\/code>:<\/p>\n<pre><code class=\"cpp\">void Widget::compose() {     compositor->reset();     XcbWindowManager::instance().traverse(compositor);     pixmap = compositor->result(); }  void Widget::paintEvent(QPaintEvent*) {     QPainter painter(this);     painter.setOpacity(0.8);     if (!pixmap.isNull())         painter.drawPixmap(0, 0, pixmap); } <\/code><\/pre>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <code>Widget::compose()<\/code> \u043c\u044b \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u043e\u043a\u043d\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 QPixmap. \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 <code>paintEvent()<\/code> \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c pixmap \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0432\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u0430\u0433\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <code>WindowCompositionHandler<\/code>. \u0411\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u043b\u043e\u0432 \u2014 \u0432\u043e\u0442 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">class WindowCompositionHandler : public ExternalWindowHandler { public:     WindowCompositionHandler(QWidget* w)         : widget(w)     {         \/\/ \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430         rootImage = grabRootImage();         reset();     }     void reset()     {         wId = leaderWindow(widget->effectiveWinId()); \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 WId         pixmap = QImage(widget->size(), Qimage::Format_ARGB32); \/\/ \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0443\u0444\u0435\u0440         QPainter painter(&amp;pixmap);         painter.drawImage(widget->rect(), rootImage, widget->geometry());     }     bool processWindow(WId w) Q_DECL_OVERRIDE     {         if (w == wId) \/\/ \u043d\u0430\u0448\u043b\u0438 \u0441\u0432\u043e\u0435 \u0436\u0435 \u043e\u043a\u043d\u043e \u2014 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u043e\u0431\u0445\u043e\u0434\u0430             return true;         if (!isVisible(w)) \/\/ \u043e\u043a\u043d\u043e \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e              return false;         const QRect wRect = windowGeometry(w); \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u043e\u043a\u043d\u0430         QRect intersected = wRect.intersected(widget->geometry()); \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f         if (intersected.isValid())         {             \/\/ \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c             \/\/ \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445             \/\/ \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435              \/\/ \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438             QPoint offset = widget->mapFromGlobal(intersected.topLeft());             \/\/ \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0432              \/\/ \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u043a\u043d\u0430             intersected.moveTo(intersected.topLeft() - wRect.topLeft());             \/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0447\u0430\u0441\u0442\u0438 \u043e\u043a\u043d\u0430             QImage image = windowImage(w, intersected);             \/\/ \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435              \/\/ \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430...             intersected.moveTo(offset);             QPainter painter(&amp;pixmap);             \/\/ ... \u0438 \u043e\u0442\u0440\u0438\u0441\u0443\u0435\u043c \u0447\u0430\u0441\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0432 \u043d\u0443\u0436\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438             painter.drawImage(intersected,image);         }         return false;     }     QPixmap result() const     {         \/\/ \u0440\u0430\u0437\u043c\u044b\u0432\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f downsampling, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442         const QSize s = pixmap.size();         QPixmap p = QPixmap::fromImage(stackBlurImage(pixmap.scaled((QSizeF(s) * 0.25).toSize(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), 3, 4));         return p.scaled(s, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);     }     QImage rootImage; \/\/ \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430     QImage pixmap;    \/\/ \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0443\u0444\u0435\u0440     QWidget* widget;  \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u043a\u043d\u043e     WId wId;          \/\/ \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430 }; <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/q5\/sx\/pm\/q5sxpmhgu9rhwk4ptun1gqyrvqk.png\" data-src=\"https:\/\/habrastorage.org\/webt\/q5\/sx\/pm\/q5sxpmhgu9rhwk4ptun1gqyrvqk.png\"\/><br \/>  <i>\u042d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u0434\u043b\u044f \u043e\u043a\u043d\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u043f\u043e\u0434 Ubuntu Linux<\/i><\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432: \u0438\u0437-\u0437\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u043e\u043a\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u044f\u0436\u0435\u043b\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 CPU \u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u043e\u043a\u043d\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u043c. \u0418\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0432\u0435\u043b\u0438\u043a\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043b\u0430\u0433 \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/l3\/gl\/uz\/l3gluzswwqsn698ich3ngrzkamw.png\" data-src=\"https:\/\/habrastorage.org\/webt\/l3\/gl\/uz\/l3gluzswwqsn698ich3ngrzkamw.png\"\/><br \/>  <i>\u041b\u0430\u0433 \u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u043e\u043a\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/i><\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u043a\u0438, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f, \u043d\u043e \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u0430\u044f.<\/p>\n<h2>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 Blur Behind \u0434\u043b\u044f Windows<\/h2>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Windows Vista \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Windows Aero \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 Blur Behind. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f<a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/dwmapi\/nf-dwmapi-dwmenableblurbehindwindow\"> DwmEnableBlurBehindWindow<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/p>\n<blockquote><p><i><b>Beginning with Windows 8, calling this function doesn&#8217;t result in the blur effect, due to a style change in the way windows are rendered.<\/b><\/i><\/p><\/blockquote>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Windows 8 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>SetWindowCompositionAttribute<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442. \u0427\u0442\u043e\u0431\u044b \u0435\u044e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 user32.dll \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 <code>SetWindowCompositionAttribute<\/code>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430\u0439\u0442\u0438 \u0445\u043e\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0442\u0440\u0443\u0434\u043d\u043e. \u0412\u043e\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">typedef enum _WINDOWCOMPOSITIONATTRIB {     WCA_UNDEFINED = 0,     WCA_NCRENDERING_ENABLED = 1,     WCA_NCRENDERING_POLICY = 2,     WCA_TRANSITIONS_FORCEDISABLED = 3,     WCA_ALLOW_NCPAINT = 4,     WCA_CAPTION_BUTTON_BOUNDS = 5,     WCA_NONCLIENT_RTL_LAYOUT = 6,     WCA_FORCE_ICONIC_REPRESENTATION = 7,     WCA_EXTENDED_FRAME_BOUNDS = 8,     WCA_HAS_ICONIC_BITMAP = 9,     WCA_THEME_ATTRIBUTES = 10,     WCA_NCRENDERING_EXILED = 11,     WCA_NCADORNMENTINFO = 12,     WCA_EXCLUDED_FROM_LIVEPREVIEW = 13,     WCA_VIDEO_OVERLAY_ACTIVE = 14,     WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15,     WCA_DISALLOW_PEEK = 16,     WCA_CLOAK = 17,     WCA_CLOAKED = 18,     WCA_ACCENT_POLICY = 19,     WCA_FREEZE_REPRESENTATION = 20,     WCA_EVER_UNCLOAKED = 21,     WCA_VISUAL_OWNER = 22,     WCA_LAST = 23 } WINDOWCOMPOSITIONATTRIB;  typedef struct _WINDOWCOMPOSITIONATTRIBDATA {     WINDOWCOMPOSITIONATTRIB Attrib;     PVOID pvData;     SIZE_T cbData; } WINDOWCOMPOSITIONATTRIBDATA;  typedef enum _ACCENT_STATE {     ACCENT_DISABLED = 0,     ACCENT_ENABLE_GRADIENT = 1,     ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,     ACCENT_ENABLE_BLURBEHIND = 3,     ACCENT_ENABLE_ACRYLICBLURBEHIND = 4,     ACCENT_INVALID_STATE = 5 } ACCENT_STATE;  typedef struct _ACCENT_POLICY {     ACCENT_STATE AccentState;     DWORD AccentFlags;     COLORREF GradientColor;     DWORD AnimationId; } ACCENT_POLICY;  WINUSERAPI BOOL WINAPI GetWindowCompositionAttribute(     _In_ HWND hWnd,     _Inout_ WINDOWCOMPOSITIONATTRIBDATA* pAttrData);  WINUSERAPI BOOL WINAPI SetWindowCompositionAttribute(     _In_ HWND hWnd,     _Inout_ WINDOWCOMPOSITIONATTRIBDATA* pAttrData); <\/code><\/pre>\n<p>  \u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>_WINDOWCOMPOSITIONATTRIB<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/dwmapi\/ne-dwmapi-dwmwindowattribute\"> DWMWINDOWATTRIBUTE<\/a>. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>_WINDOWCOMPOSITIONATTRIB<\/code>:  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<th><b>\u0418\u043c\u044f<\/b><\/th>\n<th><b>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/b><\/th>\n<th><b>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/b><\/th>\n<\/tr>\n<tr>\n<td><code>WCA_UNDEFINED<\/code><\/td>\n<td>0<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_NCRENDERING_ENABLED<\/code><\/td>\n<td>1<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_NCRENDERING_ENABLED<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_NCRENDERING_POLICY<\/code><\/td>\n<td>2<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_NCRENDERING_POLICY<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_TRANSITIONS_FORCEDISABLED<\/code><\/td>\n<td>3<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_TRANSITIONS_FORCEDISABLED<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_ALLOW_NCPAINT<\/code><\/td>\n<td>4<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_ALLOW_NCPAINT<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_CAPTION_BUTTON_BOUNDS<\/code><\/td>\n<td>5<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_CAPTION_BUTTON_BOUNDS<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_NONCLIENT_RTL_LAYOUT<\/code><\/td>\n<td>6<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_NONCLIENT_RTL_LAYOUT<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_FORCE_ICONIC_REPRESENTATION<\/code><\/td>\n<td>7<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_FORCE_ICONIC_REPRESENTATION<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_EXTENDED_FRAME_BOUNDS<\/code><\/td>\n<td>8<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_EXTENDED_FRAME_BOUNDS<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_HAS_ICONIC_BITMAP<\/code><\/td>\n<td>9<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_HAS_ICONIC_BITMAP<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_THEME_ATTRIBUTES<\/code><\/td>\n<td>10<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_NCRENDERING_EXILED<\/code><\/td>\n<td>11<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_NCADORNMENTINFO<\/code><\/td>\n<td>12<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_EXCLUDED_FROM_LIVEPREVIEW<\/code><\/td>\n<td>13<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_VIDEO_OVERLAY_ACTIVE<\/code><\/td>\n<td>14<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_FORCE_ACTIVEWINDOW_APPEARANCE<\/code><\/td>\n<td>15<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_DISALLOW_PEEK<\/code><\/td>\n<td>16<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_EXCLUDED_FROM_PEEK<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_CLOAK<\/code><\/td>\n<td>17<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_CLOAK<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_CLOAKED<\/code><\/td>\n<td>18<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_CLOAKED<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_ACCENT_POLICY<\/code><\/td>\n<td>19<\/td>\n<td><b>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 Blur Behind.<\/b><\/td>\n<\/tr>\n<tr>\n<td><code>WCA_FREEZE_REPRESENTATION<\/code><\/td>\n<td>20<\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 DWMWA_FREEZE_REPRESENTATION<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_EVER_UNCLOAKED<\/code><\/td>\n<td>21<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_VISUAL_OWNER<\/code><\/td>\n<td>22<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>WCA_LAST<\/code><\/td>\n<td>23<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>_ACCENT_STATE<\/code>:  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<th><b>\u0418\u043c\u044f<\/b><\/th>\n<th><b>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/b><\/th>\n<th><b>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/b><\/th>\n<\/tr>\n<tr>\n<td><code>ACCENT_DISABLED<\/code><\/td>\n<td>0<\/td>\n<td>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0424\u043e\u043d \u0447\u0435\u0440\u043d\u044b\u0439.<\/td>\n<\/tr>\n<tr>\n<td><code>ACCENT_ENABLE_GRADIENT<\/code><\/td>\n<td>1<\/td>\n<td>\u0424\u043e\u043d GradientColor, \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/td>\n<\/tr>\n<tr>\n<td><code>ACCENT_ENABLE_TRANSPARENTGRADIENT<\/code><\/td>\n<td>2<\/td>\n<td>\u0424\u043e\u043d GradientColor.<\/td>\n<\/tr>\n<tr>\n<td><code>ACCENT_ENABLE_BLURBEHIND<\/code>  <\/td>\n<td>3<\/td>\n<td>\u0424\u043e\u043d GradientColor \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c Blur Behind.<\/td>\n<\/tr>\n<tr>\n<td><code>ACCENT_ENABLE_ACRYLICBLURBEHIND<\/code>  <\/td>\n<td>4<\/td>\n<td>\u0424\u043e\u043d GradientColor \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c Acrylic Blur Behind.<\/td>\n<\/tr>\n<tr>\n<td><code>ACCENT_ENABLE_HOSTBACKDROP<\/code><\/td>\n<td>5<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/td>\n<\/tr>\n<tr>\n<td><code>ACCENT_INVALID_STATE<\/code><\/td>\n<td>6<\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e. \u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0444\u043e\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u0435\u043d.<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>\u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e Qt \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <code>QtWinExtra<\/code> \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>QtWinExtra::enableBlurBehindWindow()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>DwmEnableBlurBehindWindow()<\/code>. \u0415\u044e \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 Windows 7. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/x6\/w1\/mk\/x6w1mko3xw1l6co8gia17rp-a58.png\" data-src=\"https:\/\/habrastorage.org\/webt\/x6\/w1\/mk\/x6w1mko3xw1l6co8gia17rp-a58.png\"\/><br \/>  <i>\u042d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u043d\u0430 Windows 7<\/i><\/p>\n<p>  \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u041e\u0421 Windows \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0438 \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ms\/uq\/ww\/msuqwwia4qx9hlbdlxbx6lfjsnm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ms\/uq\/ww\/msuqwwia4qx9hlbdlxbx6lfjsnm.png\"\/><br \/>  <i>\u042d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u043d\u0430 Windows 10<\/i><\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u0434\u043b\u044f Top-level-\u0432\u0438\u0434\u0436\u0435\u0442\u0430 Qt \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 Windows 8 \u0438 \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"cpp\">typedef enum  {     ACCENT_DISABLED = 0,     ACCENT_ENABLE_GRADIENT = 1,     ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,     ACCENT_ENABLE_BLURBEHIND = 3,     ACCENT_ENABLE_ACRYLICBLURBEHIND = 4,     ACCENT_ENABLE_HOSTBACKDROP = 5,     ACCENT_INVALID_STATE = 6 } ACCENT_STATE;   typedef struct {     ACCENT_STATE accentState; \/\/ Background effect.     DWORD accentFlags; \/\/ Effect Flags.     COLORREF gradientColor; \/\/ Background color or gradient     DWORD animationId; \/\/ Unknown (seems to be some animation) } DWMACCENTPOLICY; \/\/ Determines how a window's background is rendered.   typedef struct _WINCOMPATTR_DATA {     DWMACCENTPOLICY AccentPolicy; \/\/ The attribute being get or set is an accent policy. } WINCOMPATTR_DATA;   typedef struct tagWINCOMPATTR {     DWORD attribute; \/\/ The attribute to query     WINCOMPATTR_DATA* pData; \/\/ Buffer to store the result     ULONG dataSize; \/\/ Size of the pData buffer } WINCOMPATTR;  void enableBlurBehind(QWidget* widget) {     typedef HRESULT (WINAPI* pfnSetWindowCompositionAttribute)(HWND, WINCOMPATTR*);     pfnSetWindowCompositionAttribute pSetWindowCompositionAttribute = 0;     HMODULE user32 = ::LoadLibraryA(\"user32.dll\");     if (user32)     {         pSetWindowCompositionAttribute =             (pfnSetWindowCompositionAttribute)::GetProcAddress(user32, \"SetWindowCompositionAttribute\");     }     DWORD dwFlags =  0x10;     DWMACCENTPOLICY policy = { ACCENT_ENABLE_BLURBEHIND, dwFlags, 0, 0};     WINCOMPATTR data = { WCA_ACCENT_POLICY, (WINCOMPATTR_DATA*)&amp;policy, sizeof(DWMACCENTPOLICY) };     if (pSetWindowCompositionAttribute)         pSetWindowCompositionAttribute((HWND)widget->winId(), &amp;data);     ::FreeLibrary(user32); } <\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0441\u043e\u0431\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 <code>accentFlags<\/code> \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>DWMACCENTPOLICY<\/code>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a:  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<th>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430<\/th>\n<th>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/th>\n<\/tr>\n<tr>\n<td>0x1   <\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.  <\/td>\n<\/tr>\n<tr>\n<td>0x2  <\/td>\n<td>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0441 \u0446\u0432\u0435\u0442\u043e\u043c, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>gradientColor<\/code>. \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b, \u043d\u043e \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 <code>ACCENT_ENABLE_GRADIENT<\/code> \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.  <\/td>\n<\/tr>\n<tr>\n<td>0x3  <\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.  <\/td>\n<\/tr>\n<tr>\n<td>0x4  <\/td>\n<td>\u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u043a\u043d\u0430 \u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432\u0441\u0435\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430.  <\/td>\n<\/tr>\n<tr>\n<td>0x8  <\/td>\n<td>\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.  <\/td>\n<\/tr>\n<tr>\n<td>0x10  <\/td>\n<td>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a \u0441 Blur Behind.  <\/td>\n<\/tr>\n<tr>\n<td>0x20  <\/td>\n<td>\u0422\u0435\u043d\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u043a\u043d\u0430.  <\/td>\n<\/tr>\n<tr>\n<td>0x40  <\/td>\n<td>\u0422\u0435\u043d\u044c \u043f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u043a\u043d\u0430.  <\/td>\n<\/tr>\n<tr>\n<td>0x80  <\/td>\n<td>\u0422\u0435\u043d\u044c \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u043a\u043d\u0430.  <\/td>\n<\/tr>\n<tr>\n<td>0x100  <\/td>\n<td>\u0422\u0435\u043d\u044c \u043f\u043e \u043d\u0438\u0436\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043e\u043a\u043d\u0430.  <\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>gradientColor<\/code> \u0438\u0437 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e Blur Behind, \u043d\u043e \u0435\u0449\u0435 \u0438 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0443\u044e \u0437\u0430\u043b\u0438\u0432\u043a\u0443 \u0446\u0432\u0435\u0442\u043e\u043c. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3s\/7h\/wi\/3s7hwis4ieogglvlpv8hn-qwydq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3s\/7h\/wi\/3s7hwis4ieogglvlpv8hn-qwydq.png\"\/><br \/>  <i>\u042d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u043d\u0430 Windows 10 \u0441 \u0437\u0435\u043b\u0435\u043d\u043e\u0439 \u0437\u0430\u043b\u0438\u0432\u043a\u043e\u0439<\/i><\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442\u0430\u043a\u0436\u0435 \u0444\u043b\u0430\u0433 <code>0x10:<\/code> \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043e\u043a\u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u043d\u0435\u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u044b.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ed\/mc\/bt\/edmcbteph3dxlvdlnwbxw-bq-ac.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ed\/mc\/bt\/edmcbteph3dxlvdlnwbxw-bq-ac.png\"\/><br \/>  <i>\u042d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u0434\u043b\u044f \u043e\u043a\u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u044b \u043d\u0430 Windows 10<\/i><\/p>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441 <code>ACCENT_ENABLE_ACRYLICBLURBEHIND<\/code>. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0432 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u0435 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f. \u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043e\u043a\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043e\u043a\u043d\u0430, \u0435\u0433\u043e \u0431\u0443\u043a\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/da\/ed\/u-\/daedu-9nezlan4mzkhafzlp_uca.png\" data-src=\"https:\/\/habrastorage.org\/webt\/da\/ed\/u-\/daedu-9nezlan4mzkhafzlp_uca.png\"\/><br \/>  <i>\u042d\u0444\u0444\u0435\u043a\u0442 Blur Behind c <code>ACCENT_ENABLE_ACRYLICBLURBEHIND<\/code> \u043d\u0430 Windows 10<\/i><\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u0432 <code>paintEvent():<\/code> \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e\u0442 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0444\u043e\u043d\u0430 \u043e\u043a\u043d\u0430, \u043d\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Qt Framework. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043e\u043a\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u0435\u0441\u044c\u043c\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9h\/nv\/u5\/9hnvu562oq4hattxkepjj19ktnu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/9h\/nv\/u5\/9hnvu562oq4hattxkepjj19ktnu.png\"\/><\/p>\n<h2>Blur Behind \u043d\u0430 macOS<\/h2>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 macOS \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d API Cocoa, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442. \u041a\u043b\u0430\u0441\u0441 <code>NSVisualEffectView<\/code> \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438 AppKit \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438: \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u043a\u0430\u043a \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 Qt Framework. \u041e\u0434\u043d\u043e \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>QWindow<\/code>:<\/p>\n<pre><code class=\"cpp\">class EffectWindow : public QWindow {     Q_OBJECT public:     EffectWindow(); protected:     void resizeEvent(QResizeEvent* ev) Q_DECL_OVERRIDE; private:     QWindow* m_effectWindow; };   EffectWindow::EffectWindow() : QWindow() {     \/\/ \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432     NSVisualEffectView *effectsView = [[NSVisualEffectView alloc] init];     effectsView.material = NSVisualEffectMaterialHUDWindow;     effectsView.blendingMode = NSVisualEffectBlendingModeBehindWindow;     effectsView.state = NSVisualEffectStateActive;      \/\/ \u041e\u0431\u0435\u0440\u043d\u0435\u043c \u043e\u043a\u043d\u043e \u0432 QWindow, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e     m_effectsWindow = QWindow::fromWinId(reinterpret_cast&lt;WId>(effectsView));      \/\/ \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u043a\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u043a\u0430\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0435 \u043a \u043d\u0430\u0448\u0435\u043c\u0443     m_effectsWindow->setParent(this);     m_effectsWindow->setGeometry(this->geometry());     m_effectsWindow->show(); }  void EffectWindow::resizeEvent(QResizeEvent* ev) {     QWindow::resizeEvent(ev);     \/\/ \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043e\u043a\u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u043a\u043d\u0430     m_effectsWindow->setGeometry(0, 0, ev->size().width(), ev->size().height()); } <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u043c\u0438 <code>QLayout<\/code> \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 <code>QWidget<\/code><br \/>  -\u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c \u044d\u0442\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u044b\u0440\u043d\u0443\u0442\u044c \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>QWidget<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>QWindow<\/code>.<\/p>\n<p>  \u0421\u043f\u0435\u0440\u0432\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u0430\u043d <code>QWidget<\/code> c <code>NSView<\/code>. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0435\u0433\u043b\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b Qt, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f macOS \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a <code>NSView<\/code> \u2014 <code>QNSView<\/code>. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 <code>NSView<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">NSView *view = (NSView *)widget->window()->effectiveWinId();<\/code><\/pre>\n<p>  \u0418\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e <code>NSView<\/code> \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0430\u043c\u043e \u043e\u043a\u043d\u043e <code>NSWindow<\/code>:<\/p>\n<pre><code class=\"cpp\">NSWindow *wnd = [view window];<\/code><\/pre>\n<p>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a <code>QWidget<\/code>, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u0435\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u044d\u0444\u0444\u0435\u043a\u0442 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f <code>QLayout<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0432 \u043d\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u0432\u044b\u0437\u043e\u0432\u0430<\/p>\n<pre><code class=\"cpp\">m_effectsWindow = QWindow::fromWinId(reinterpret_cast&lt;WId>(effectsView));<\/code><\/pre>\n<p>  \u044d\u0444\u0444\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0435\u0440\u0445 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 <code>QWidget<\/code>. \u041a\u0430\u043a \u0436\u0435 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f <code>NSView<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 <code>NSWindow<\/code>. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0432\u044b\u0437\u043e\u0432 <code>addSubview<\/code> \u0443 <code>NSWindow<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>NSView<\/code> \u043a\u0430\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>NSWindow<\/code>. \u042d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0443\u0442\u0435\u043c: \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u0430\u043a \u0432 \u043a\u043e\u0434\u0435 \u0440\u0430\u043d\u0435\u0435, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a \u043e\u043a\u043d\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043b\u043e\u0436\u043d\u044b\u0439 <code>QWidget<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043d\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 UI. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e <code>QLayout<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0434\u0430 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>winId()<\/code> \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <code>NSView<\/code><br \/>   \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u043a\u043d\u0443. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <code>NSView<\/code> \u0432\u0438\u0434\u0436\u0435\u0442\u0430-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043a \u043e\u043a\u043d\u0443 \u043f\u043e\u0441\u043b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0430, \u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f <b>\u0432\u044b\u0448\u0435<\/b> \u043f\u043e \u043e\u0441\u0438 Z \u0438 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u0438\u0434\u0438\u043c\u044b.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0432\u0438\u0434\u0436\u0435\u0442\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043a\u043b\u0430\u0441\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0445\u0440\u0430\u043d\u044f\u0449\u0443\u044e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 <code>NSView<\/code>. \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>void*<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 NS-\u0442\u0438\u043f\u044b \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u0421++. \u0414\u0430\u043b\u0435\u0435 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 <code>resizeEvent()<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043b\u044e\u0431\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043b\u044f <code>NSVisualEffectView<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432 <code>QRect<\/code> \u0432 <code>CGRect<\/code> \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0432 <code>NSWindow<\/code> \u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0442\u043e\u0442 \u0436\u0435 <code>CGRect<\/code> \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u0442\u0443\u0442 \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445. \u041d\u0430\u0448 \u0432\u0438\u0434\u0436\u0435\u0442-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0444\u043e\u043d, \u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0435\u043d \u044d\u0444\u0444\u0435\u043a\u0442 BlurBehind. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>Qt::WA_TranslucentBackground<\/code> \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043d\u043e, \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u044d\u0442\u043e \u043d\u0435 \u0434\u0430\u0441\u0442. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043a\u043e\u043d \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>Qt::WA_TranslucentBackground<\/code> \u043d\u0430 \u0432\u0435\u0441\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0432\u0438\u0434\u0436\u0435\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tb\/if\/rg\/tbifrg6kh0k4mo9xxrmzlz2m7bm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/tb\/if\/rg\/tbifrg6kh0k4mo9xxrmzlz2m7bm.png\"\/><br \/>  <i>\u042d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u043d\u0430 macOS BigSur<\/i><\/p>\n<p>  \u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043a\u043e\u0434, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435:<\/p>\n<pre><code class=\"cpp\">class EffectWidget : public QWidget {     Q_OBJECT public:     EffectWidget(); protected:     void resizeEvent(QResizeEvent* ev) Q_DECL_OVERRIDE; private:     void* m_effectView; };   EffectWidget::EffectWidget() : QWidget() {     \/\/ \u0412\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0432\u0438\u0434\u0436\u0435\u0442\u0443 \u0438\u043c\u0435\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0444\u043e\u043d     setAttribute(Qt::WA_TranslucentBackground);      \/\/ \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 NSView \u0438 NSWindow     NSView *view = (NSView *)window()->effectiveWinId();     NSWindow *wnd = [view window];      \/\/ \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u044d\u0444\u0444\u0435\u043a\u0442     auto v = [[[NSVisualEffectView alloc] init] autorelease];     v.material = NSVisualEffectMaterialHUDWindow;     v.blendingMode = NSVisualEffectBlendingModeBehindWindow;     v.state = NSVisualEffectStateActive;      \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0444\u0444\u0435\u043a\u0442 \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u043a\u043d\u0443     [wnd.contentView addSubview:v];     [v setFrameSize:[ [ wnd contentView ] frame ].size];      m_effectView = v;      \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0438\u0434\u0436\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440     QWidget* content = new QWidget(this);     QPushButton* button = new QPushButton(\"Push Me!\", content);     QVBoxLayout* layout = new QVBoxLayout(content);     layout->addWidget(button);      QVBoxLayout* mainLayout = new QVBoxLayout(this);     mainLayout->addWidget(content);      \/\/ \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 NSView \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430     NSView *contentView = (NSView *)content->winId();      \/\/ \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u043c NSView \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u043a\u043d\u0443     [wnd.contentView addSubview:contentView];      \/\/ \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u043a\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044f\u0432\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c show()     content->show(); }  void EffectWidget::resizeEvent(QResizeEvent *event) {     QWidget::resizeEvent(event);     NSView *view = (NSView *)window()->effectiveWinId();     NSWindow *wnd = [view window];     NSView* effect = (NSView*)m_effectView;     \/\/ \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043e\u043a\u043d\u0430 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0430     [effect setFrame:[ [ wnd contentView ] frame ]]; } <\/code><\/pre>\n<p>  <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0443\u0434\u0430\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u0438. \u041d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u043f\u0443\u0441\u0430\u0442\u044c \u0440\u0443\u043a\u0438: \u043d\u0435\u0443\u0434\u0430\u0447\u0438 \u043b\u0438\u0448\u044c \u043f\u043e\u0434\u0441\u0442\u0435\u0433\u043d\u0443\u0442 \u0432\u0430\u0441 \u043a \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u043c\u0443 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043a \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c, \u0447\u0435\u043c \u043c\u043e\u0433\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u0439 \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 Blur Behind \u043e\u043a\u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u041e\u0421 Windows \u0438 macOS, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u0434\u043b\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u043c\u043e\u0433 \u0432\u0430\u043c \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043e\u043a\u043e\u043d\u043d\u044b\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u043e\u0432 \u0438 \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Qt, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0446\u0435\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430.<\/p>\n<blockquote><p>\u041f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 VK Teams \u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/biz.mail.ru\/teams\/?utm_source=referral&amp;utm_medium=habr&amp;utm_campaign=blur_behind\">\u0441\u0430\u0439\u0442\u0435<\/a>. <\/p><\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/735716\/\"> https:\/\/habr.com\/ru\/articles\/735716\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/vk.com\/rtrg?p=VK-RTRG-1297426-bEGLU&amp;event=habr_workspace\" style=\"display:none;\" width=\"1\"><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/dj\/if\/xx\/djifxxayoibafqtgg_a7y5vbwas.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/dj\/if\/xx\/djifxxayoibafqtgg_a7y5vbwas.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0438\u0445\u0430\u0438\u043b \u041f\u043e\u043b\u0443\u043a\u0430\u0440\u043e\u0432, \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 Desktop-\u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0443\u043f\u0435\u0440\u0430\u043f\u043f\u0430 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435<a href=\"https:\/\/teams.vk.com\/\"> VK Teams<\/a>. \u042f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b \u043d\u0430 \u0425\u0430\u0431\u0440 \u0434\u0432\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0445 \u043e\u043a\u043e\u043d \u0438 \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0445 \u0441\u043f\u0435\u0446\u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Qt Framework: \u0432\u043e\u0442 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/691200\/\">\u043f\u0435\u0440\u0432\u0430\u044f<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/701382\/\">\u0432\u0442\u043e\u0440\u0430\u044f<\/a>. \u041f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0430\u043c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0443\u0434\u0430\u0447, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0435\u0446\u044d\u0444\u0444\u0435\u043a\u0442\u0430 Blur Behind \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u0421.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-406861","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/406861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=406861"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/406861\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=406861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=406861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=406861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}