qtcreator的控件拖拽着就消失/不可见了

在.ui文件的编辑状态下,控件在界面上拖拽着就突然“消失”,在侧边栏中还能找到,但鼠标右键点击后不能弹出选项栏进行操作,或进行大小改变等状态编辑操作。

此时只需要关闭本ui文件再重新打开即可。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt 是一个强大的跨平台 GUI 开发工具包,它提供了很多有用的控件和功能,比如控件拖拽。下面是一些实现控件拖拽的步骤: 1. 在 Qt Creator 中创建一个窗口工程。 2. 在窗口中添加要拖拽控件,如按钮、标签等。 3. 实现控件拖拽功能,可以使用 Qt 的鼠标事件和事件过滤器。 4. 在控件上实现鼠标事件,包括鼠标按下、移动和释放等。 5. 实现事件过滤器,以便对控件的鼠标事件进行处理。 6. 在控件的 mousePressEvent 函数中记录鼠标的坐标,以便在 mouseMoveEvent 函数中使用。 7. 在 mouseMoveEvent 函数中计算控件的新坐标,并使用 move 函数将控件移动到新的位置。 8. 最后,在 mouseReleaseEvent 函数中实现鼠标释放后的动作,如保存控件的位置等。 这些步骤可以帮助你快速实现控件拖拽功能,但请注意,实际实现可能因你的项目要求而有所不同。 ### 回答2: 使用Qt实现控件拖拽可以通过以下步骤进行: 1. 首先,需要在Qt的窗口上放置一个可拖拽控件,可以是QPushButton、QLabel等。可以通过在窗口上拖放控件或者在代码中创建控件。 2. 在拖放源控件上,设置Qt的拖放事件,使其能够被拖放到目标控件上。可以使用setDragEnabled(true)方法来启用控件拖拽功能。 3. 在目标控件上,设置Qt的拖放事件,使其能够接收拖放源控件。可以使用setAcceptDrops(true)方法来启用控件接收拖放功能。 4. 在拖放源控件上,实现mousePressEvent()方法,当鼠标按下时,记录拖放源控件的初始位置和鼠标相对于控件的位置偏移量。 5. 实现mouseMoveEvent()方法,在该方法中,根据鼠标在窗口中的移动距离,更新拖放源控件的位置。 6. 实现dragEnterEvent()方法和dropEvent()方法,在这两个方法中,可以处理拖放源控件进入目标控件区域和释放拖放源控件的行为。 7. 可以根据需要,添加其他相关事件,如mouseReleaseEvent()方法,当鼠标释放时对控件进行相应操作。 通过以上步骤,就可以实现使用Qt实现控件拖拽功能。 ### 回答3: 使用Qt实现控件拖拽可以通过Qt提供的QDrag和QDropEvent类来实现。 首先,在窗口中需要拖拽控件上设置鼠标按下事件,当鼠标按下时,创建一个QDrag对象,设置拖拽的数据为需要拖拽控件。然后,调用QDrag对象的exec方法启动拖拽操作。示例代码如下: ``` void Widget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; // 设置拖拽的数据为控件的描述信息 mimeData->setText("My Widget"); drag->setMimeData(mimeData); // 开始拖拽操作 drag->exec(); } } ``` 接下来,在需要放置拖拽控件的目标窗口中,重写dragEnterEvent和dropEvent事件处理函数。在dragEnterEvent函数中判断拖拽进入的数据类型,如果是需要的控件,则设置接受拖拽操作。在dropEvent函数中获取拖拽的数据,并根据数据进行处理。示例代码如下: ``` void TargetWidget::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasText() && event->mimeData()->text() == "My Widget") { // 接受拖拽操作 event->acceptProposedAction(); } } void TargetWidget::dropEvent(QDropEvent *event) { // 获取拖拽的数据 QString widgetText = event->mimeData()->text(); // 创建新的控件,并根据数据进行处理 QLabel *label = new QLabel(widgetText); // ... // 在目标窗口中放置控件 layout()->addWidget(label); } ``` 通过重写鼠标事件和拖拽事件处理函数,可以实现Qt控件拖拽功能。在拖拽开始时设置数据,拖拽结束时获取数据并进行处理。这样就可以在不同的窗口间实现控件拖拽

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值