Qt: 可移动窗口小部件的窗口

3
我想创建一个窗口,其中包含可变数量的自定义小部件,每个小部件可以是一些简单对象的组合。这些小部件应该类似于对话框窗口:它们可以在父窗口内任意移动、重叠等。然而,它们不能移出窗口。 使用QT3实现这样的功能最合适的方法是什么?我尝试使用主窗口作为父窗口创建窗口/对话框,但这样会导致小部件可以移出窗口。

似乎您需要创建自己的对话框对象,并将其作为父级窗口嵌入到 MDI 窗口中? - Andrejs Cainikovs
1个回答

2
你可能可以利用拖放功能。这是我能想到的唯一方法。
Qt中有一个名为“冰箱磁铁”的示例。基本上,他们创建了一个名为DragWidget的类,它是所有其他小部件的主机。在示例中,他们创建了一堆带有单词的QLabel,用户可以将它们拖动来创建句子。
主要任务是实现以下函数。
void dragEnterEvent(QDragEnterEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
void mousePressEvent(QMouseEvent *event);

这个例子是在Qt4中介绍的,但它应该能给你一个想法,代码在这里
基本上,当鼠标按下时,鼠标下方的控件会被隐藏,并且一个图像会被放置在拖动数据中。当用户将其放在控件的某个地方时,示例将关闭前一个位置的控件并创建一个新的QLabel,然后将其放置在用户放置的位置。你可能需要更改它,只需将你的控件移动到那个位置即可。
该示例使用了一些与3.3中可用的略有不同的概念,所以这里是一个来自3.3的拖放示例。
主要问题是在用户拖动时显示什么。在第一个示例中,他们使用了一个很好的技巧来构建标签的图像,因此它真的看起来像用户正在拖动小部件。
显然,在Qt4中使用MDI功能会更容易,但如果这不是一个选项,这是我能想到的唯一方法。
希望这可以帮助到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接