QT 利用QPainter画了一条线,这条线能随鼠标的拖曳而拖动吗?这个功能能实现吗,如果能,请问怎么实现。
1个回答
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);
}
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().
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询