对于继承QDockWidget的控件Qtoolbutton,button->setDragEnabled(true);在Qt5.13.0中无法使用
时间: 2024-02-18 13:00:19 浏览: 95
对于继承自`QDockWidget`的控件`QToolButton`,是不支持直接调用`setDragEnabled()`方法启用拖拽功能的。但是可以通过重新实现`mousePressEvent()`和`mouseMoveEvent()`方法来实现拖拽功能。示例代码如下:
```
void MyToolButton::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
dragStartPosition = event->pos();
QToolButton::mousePressEvent(event);
}
void MyToolButton::mouseMoveEvent(QMouseEvent *event)
{
if (!(event->buttons() & Qt::LeftButton))
return;
if ((event->pos() - dragStartPosition).manhattanLength()
< QApplication::startDragDistance())
return;
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
// 设置拖拽数据
drag->setMimeData(mimeData);
// 启动拖拽
drag->exec(Qt::MoveAction);
}
```
在这个示例代码中,我们继承了`QToolButton`类,并重新实现了`mousePressEvent()`和`mouseMoveEvent()`方法。当鼠标左键按下时,记录鼠标位置;当鼠标移动到一定距离时,启动拖拽操作。在`mouseMoveEvent()`方法中,我们创建了一个`QDrag`对象,并设置了拖拽数据。最后,调用`exec()`方法启动拖拽操作。
阅读全文
相关推荐















