二维码页面
该链接会唤起手机QQ,
若无法正常跳转请先。QT 利用QPainter画了一条线,这条线能随鼠标的拖曳而拖动吗?这个功能能实现吗,如果能,请问怎么实现。
08:59 提问者: 小鬼恋书 |浏览次数:305次
我来帮他解答&
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 .希望可以交个朋友。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:518次
排名:千里之外QT重绘函数:第一次调用重绘函数画了一条线,第二次在调用重绘函数画另一条线时,怎么让第一条线不消失?_百度知道我想在qt的mainwindow界面下设置一个按钮,点击这个按钮之后在指定位置画一条线,能实现吗?怎么做_百度知道用Qt编程画一条线,当点击这条线的时候线变色。_百度知道