Qt:带有可移动小部件的窗口
Qt: window with movable widgets
我想创建一个带有可变数量的自定义小部件的窗口,每个小部件可以是一些简单对象的一组。小部件的行为应该类似于对话窗口:它们可以在父窗口的任何地方移动,可以重叠等。然而,他们不能被移出窗外。用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功能要容易得多,但如果这不是一个选项,这是我唯一能想到的。
希望对你有帮助。
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- QT-如何通过按下按钮从子窗口小部件返回到父窗口小部件
- 如何将QEvents传递给子窗口小部件
- 如何在子小部件而不是父窗口小部件上绘制一条线
- 如何识别子窗口小部件中的QMouseEvent
- 错误编译QT创建者 / QT窗口小部件示例
- 单击另一个小组件时将窗口小部件标记为未选中
- 在父窗口/小部件类中初始化子小部件的目的是什么?
- 当光标不在窗口小部件上时,QT小部件检测鼠标事件
- 如何在父窗口小部件的右侧绘制
- C++ 创建小部件数组
- 在Qt5中的多个弹出窗口小部件上接收鼠标EnterEvent和LeaveEvent
- 在Qt窗口小部件/QWindow上显示供过于求窗口
- Qt 删除窗口小部件
- 通过按钮访问父窗口小部件的变量
- WinAPI CreateWindow函数创建的窗口比设置的窗口小
- 如何使QWidget(或QDialog)以其父窗口小部件为中心
- 无法对Qt5中的窗口小部件进行聚焦和输入
- 选项卡化所有停靠窗口小部件
- 使用接口类型查找子窗口小部件