QT 利用QPainter画了一条线,这条线能随鼠标的拖曳而拖动吗?这个功能能实现吗,如果能,请问怎么实现。

 我来答
匿名用户
2012-04-19
展开全部
可以用mouseMoveEvent或timer刷新鼠标坐标,然后重画。以下是timer方法:

Draw::Draw(QWidget *parent):QWidget(parent)
{
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(updateSlot()));
m_timer->start(10);
}

void Draw::updateSlot()
{
QPoint pos = mapFromGlobal(QCursor::pos());
m_startX = pos.x();
m_startY = pos.y();
update();
}
void Draw::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(m_startX, m_startY, m_startX+20, m_startY+10);
}
更多追问追答
追问
首先感谢你的回答。可能是我描述上的问题,按照你的代码实现后,随意拖动鼠标,线都会跟着鼠标拖动。而我所需要实现的功能是当我画完线以后,用鼠标选中这根线后,鼠标左键按下时才对线进行拖动的。
追答
如果按下才拖动,不必用timer/tracking.

先设置一个私有变量m_dragging = 0

保护继承mousePressEvent方法,方法内取得event->pos()后, 可以判断是否选中. 如果选中, m_dragging = 1.
保护继承mouseMoveEvent方法, 方法内如果m_dragging = 1, 则刷新m_startX,m_startY, update().
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式