QT 利用QPainter画了一条线,这条线能随鼠标的拖曳而拖动

QT 利用QPainter画了一条线,这条线能随鼠标的拖曳而拖动吗?这个功能能实现吗,如果能,请问怎么实现。 2012-04-19 08:59 提问者: 小鬼恋书 |浏览次数:305次
我来帮他解答 
满意回答
2012-04-19 11:09热心网友可以用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().追问 怎么样判断event->pos()获得的位置点是在我们画的线上的点呢。回答 很简单,画完时保存坐标,然后同event->pos比较。追问 画完只能知道起始点和终点坐标。因为我们做的功能,现在线是可以任意旋转和上下左右移动的,旋转后线的坐标等也都发生了变化。要判断这条线是否选中(光标点是否在这条所画的线段上),还是有点复杂的(而且现在不仅一条线,还有多条线交叉的情况)。目前我的做法是把线画在一个QLabel控件上,现在可以上下左右移动控件,但不知道怎么可以旋转QLabel这个控件?回答 用QLineF, 它的intersect方法可判断是否相交。 setAngle方法可旋转。旋转QLabel需要修改painterEvent, 且不见得能简化这个过程。用QLineF保存线的位置吧。赞同0|评论提问者对回答的评价:
谢谢。初学QT,谢谢你的热情帮助。本人QQ 309437240.希望可以交个朋友。

你可能感兴趣的:(qt)