我使用Qt,我想用鼠标移动一些对象.例如,用户单击对象并将此对象拖动到另一个窗口位置.我怎么能这样做?
我试过mouseMoveEvent:
void QDropLabel::mouseMoveEvent(QMouseEvent *ev)
{
this->move(ev->pos());
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,对象移动的方式很奇怪.它从一个地方跳到另一个地方.
QDropLabel继承了QLabel.它还给了一个像素图.我尝试用不同的对象来做,但结果是一样的.
han*_*ank 18
您的可移动小部件必须有一个QPoint offset成员.它将存储光标单击相对于小部件左上角的位置:
void DropLabel::mousePressEvent(QMouseEvent *event)
{
offset = event->pos();
}
Run Code Online (Sandbox Code Playgroud)
在鼠标移动事件中,您只需在其父坐标系中移动窗口小部件.请注意,如果您没有offset从光标位置减去,您的小部件将"跳转",因此其左上角将位于光标下方.
void DropLabel::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
this->move(mapToParent(event->pos() - offset));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17440 次 |
| 最近记录: |