gpt4 book ai didi

c++ - 在 QMainWindows 之间拖动 QDockWidgets

转载 作者:可可西里 更新时间:2023-11-01 18:39:56 44 4
gpt4 key购买 nike

我有一个关于在 QMainWindows 之间拖动 QDockWidgets 的问题。我有一个具有不同“DockAreas”的应用程序,它有一个 QMainWindow 成员和一个或多个 QDockWidgets。此外,我想让 QDockWidgets 可以拖放到其他已经 float 的 QDockWidgets(不是标签式的!)。

为了在拖放时获得漂亮的悬停效果, float QDockWidgets 嵌入到我的 DockArea 的新实例中,该实例具有 QMainWindow 成员。现在我拦截了被拖动的 QDockWidget 的 mousemove 事件,并在它悬停在我的 DockArea 的另一个 QMainWindow 上时更改它的父级。不幸的是,这会导致崩溃,并且看起来这个 QDockWidget 所在的原始 QLayoutItem 已经消失了。

void QDockWidgetPrivate::moveEvent(QMoveEvent *event)
{
// ...
// now this widgetItem member of state is kaputt
layout->hover(state->widgetItem, globalMousePos);
}

我在互联网上找到了在 QMainWindows 之间拖放 QDockWidgets 的不同建议:

1) 重新养育 - 这就是我正在尝试的 atm

2) QDrag - 对我不起作用,async exec() 破坏了我的应用程序,最后我不得不重新设置父级

3) 调用新 QMainWindow 的 addDockWidget(...) - 停靠 QDockWidget,我将不得不让它再次 float 并以某种方式“继续拖动”

我愿意接受任何新建议 :) 在此先感谢您!

最佳答案

我现在正在努力解决同样的问题并想分享。

我发现这个论坛帖子处理同样的问题:http://www.qtcentre.org/threads/41847-Dragging-QDockWidgets-between-QMainWindows然而,这个解决方案是有缺陷的:如果允许 Dockables float ,它就不能正常工作。当您进入另一个窗口并仍在拖动 QDockWidget 时,enterEvent 实际上不会触发。仅在发布后触发。

我也打算重新设置 (1)。当您还希望允许在窗口中重新排列 QDockWidget 时,QDrag 似乎有问题。

我认为可以通过对拖放 QDockWidget 的放下/释放使用react来正确地做到这一点。但是我找不到为此的事件或信号。

关于c++ - 在 QMainWindows 之间拖动 QDockWidgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35287958/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com