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

时间:2011-11-09 16:10:38

标签: c++ qt user-interface qt3

我想创建一个包含可变数量的自定义小部件的窗口,每个小部件可以是一组简单对象。窗口小部件应该与对话框窗口类似:它们可以移动到父窗口内的任何位置,可以重叠等等。但是,它们不能移出窗口。用QT3实现这样的最合适的方法是什么?我尝试使用主窗口创建窗口/对话框作为父窗口,但这样可以将窗口小部件移出窗口。

1 个答案:

答案 0 :(得分:2)

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

Qt中有一个名为Fridge Magnets的例子。基本上他们创建了一个名为DragWidget的类,它是所有其他小部件的主机。在这个例子中,他们创建了大量带有单词的QLabel,用户可以拖动它们来创建句子。

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

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

这个例子是在Qt4中引入的,但它应该给你一个想法,代码是here

基本上,当按下鼠标时,鼠标下的控件被隐藏,并且图像被放置在拖动数据中。当用户将其放在控件中的某个位置时,该示例将关闭前一位置的那个并创建一个新的QLabel并将其放在用户放置的位置。您可能应该将其更改为仅将控件移动到该位置。

该示例使用了一些与3.3中的可用概念略有不同的概念,因此here是3.3的拖放示例

主要问题是当用户拖动时要显示的内容。在第一个例子中,他们使用一个很好的技巧来构建标签的图像,所以看起来用户正在拖动小部件。

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

希望有所帮助。