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

Qt: window with movable widgets

本文关键字:窗口 小部 可移动 Qt      更新时间:2023-10-16

我想创建一个带有可变数量的自定义小部件的窗口,每个小部件可以是一些简单对象的一组。小部件的行为应该类似于对话窗口:它们可以在父窗口的任何地方移动,可以重叠等。然而,他们不能被移出窗外。用QT3实现这样的东西最合适的方法是什么?我试着用主窗口作为父窗口来创建窗口/对话框,但是这样小部件可以被移出窗口。

您可以使用拖放功能。这是我唯一能想到的。

Qt自带的一个例子叫做冰箱磁铁。基本上,他们创建了一个名为DragWidget的类,它是所有其他小部件的宿主。在这个例子中,他们创建了一系列带有单词的qlabel,用户可以拖动这些单词来创建句子。

主要工作是实现以下功能:

void dragEnterEvent(QDragEnterEvent *event);
void dragMoveEvent(QDragMoveEvent *event);
void dropEvent(QDropEvent *event);
void mousePressEvent(QMouseEvent *event);

这个例子是与Qt4一起介绍的,但它应该给你一个想法,代码在这里

基本上,当按下鼠标时,隐藏鼠标下的控件,并将图像放置在拖动数据中。当用户将QLabel放到控件的某个位置时,示例关闭前面位置的QLabel,并创建一个新的QLabel,并将其放在用户放置的位置。你应该把它改成把你的控件移到那个位置。

这个例子使用了一些概念,这些概念与3.3版本中的有些不同,所以这里是3.3版本

中的一个拖放示例

主要的问题是当用户拖拽时该显示什么。在第一个例子中,他们使用了一个很好的技巧来构建标签的图像,所以它看起来真的像用户在拖拽小部件。

显然,在q4中使用MDI功能要容易得多,但如果这不是一个选项,这是我唯一能想到的。

希望对你有帮助。