相关疑难解决方法(0)

如何在多显示器设置中让无边界子窗口重新缩放到当前屏幕?

我的应用程序具有创建并打开一个QML的子类的实例的主窗口Window {}使用createObject().这个窗口flags:设置为无边框窗口(我添加了代码,以便可以抓取并拖动它).

当我将显示器连接到笔记本电脑并将其字体比例因子设置为125%(或150%)时,当我将主窗口拖到第二个显示器时,您可以看到它突然"突然"到更大的尺寸中途点.同样地,当我将它拖回到我的笔记本电脑屏幕时,当我半途而废时,它再次"捕捉"到较小的尺寸(这种行为是我想要的,所以这里没有问题).

我的问题是,当我将创建的无边框窗口拖到显示器中时,它保持原始的100%比例因子,并且不会"捕捉"到更大的尺寸.如果我将主窗口拖到显示器上,它会变大,但无边框窗口保持较小的比例; 只有当我抓住无边框窗口并稍微移动它才会突然"捕捉"到更大的比例尺寸.相反的情况反过来 - 如果我然后将无边框窗口拖回到笔记本电脑上,它将保持较大的尺寸,直到我将主窗口向后拖动然后稍微移动无边框窗口(此时它突然"捕捉"到较小的尺寸).

所以看来这个创建Window使用了屏幕的比例因子父窗口 创建它的窗口当前处于,即使它本身位于不同的屏幕中.

这是否因为Window无边界而发生?(我即将测试这个,但我的构建过程非常慢)或者有没有办法设置这个无边框Window,以便它检测到它正在进入一个新的屏幕并重新缩放自己(就像我的方式一样)主窗口呢)?

更新:我刚刚运行了一个测试,给出了我Window的原生标题栏,并且使用标题栏,窗口立即采用("快照")任何一个屏幕的比例因子,就像我的主窗口一样(并且独立于主窗口)窗口的比例因子).

那么有没有办法用无边框窗口复制这种自动缩放窗口行为?我需要调用一些标志,或者我需要调用一些方法来让操作系统重新调整窗口大小?

更新2:我尝试了Felix的SetWindowPos解决方案.它确实会移动窗口,但这并不能解决缩放问题 - 无框窗口的行为是相同的,它仍然无法正确地获取它所在屏幕的缩放因子.

我正在运行测试,MoveWindow而不是SetWindowPos看看是否会影响任何事情[ 编辑: MoveWindow不起作用,或者 - 同样的问题].然后我将尝试SendMessagePostMessage与NoBugz一起提出WM_DPICHANGED消息的建议.

欢迎任何其他建议.

更新3:我刚刚创建了一个快速的C#应用​​程序(winforms)来查看是否出现了同样的问题,而且它没有 - 当C#应用程序中的无边框表单被拖到另一个监视器中时,它会立即获取比例因子变化.所以看来这是一个Qt问题.

更新4:请参阅下面的答案,找出解决此问题的方法(如果有点破解).

windows qt qml

14
推荐指数
2
解决办法
363
查看次数

标签 统计

qml ×1

qt ×1

windows ×1