疑问:手动用DPlatformWindowHandle给Qt无边框窗口添加DXCB效果只有有时才能生效 #3351
Replies: 7 comments
-
注:在此例中我使用一个外部动态库进行与dtkwidget的DPlatformWindowHandle的操作,用QPluginLoader加载;但与链接到程序内效果并无不同。 |
Beta Was this translation helpful? Give feedback.
-
唔,这个操作我还没有试过,骚等我试一下。 |
Beta Was this translation helpful? Give feedback.
-
似乎你不需要设置setWindowFlag,不管他就可以了。 |
Beta Was this translation helpful? Give feedback.
-
经过测试,成功给dtk的同学新增了bug。 |
Beta Was this translation helpful? Give feedback.
-
貌似是qt5.15才会出现这种情况。 |
Beta Was this translation helpful? Give feedback.
-
我电脑硬盘小,宿主机Manjaro是5.15,客户机Deepin 20.2.2也是5.15,没条件测试其他版本哈 |
Beta Was this translation helpful? Give feedback.
-
Qt::FramelessWindowHint 这个flag是容易造成某些情况下没效果,原因暂时不明(可能窗管的问题)。建议使用时去掉这个flag,因为使用DPlatformWindowHandle 本来就是无边框的。 |
Beta Was this translation helpful? Give feedback.
-
我在Deepin 20.2.1环境下,创建一个无边框(
Qt::FramelessWindowHint
)的QMainWindow window
、创建一个DPlatformWindowHandle p(&window, &window)
,试图通过在DTK“注册”该窗口达到给普通窗口添加DXCB效果(如圆角、边框缩放)。期间遇到几个问题:如果在
window.show()
之前创建DPlatformWindowHandle,则无论如何只能呈现无阴影、无法缩放的状态;如果在
window.show()
之后创建,则大部分时候,窗口都会呈现无阴影、无法缩放的状态:有的时候,窗口会具有与未注册到DXCB时一样的阴影,但仍无法缩放:
极个别时候窗口具有正常的圆角和正常的边框缩放:
作为对比,不注册到DXCB时无边框窗口的样式:
如果这样做能够生效,那么肯定有正确之处,但是我不知道这些问题发生的原因。如果这样的做法不正确,那么如何做才可以让普通的无边框QMainWindow具有DXCB的效果?
Beta Was this translation helpful? Give feedback.
All reactions