Sorry, I've been unavailable.
Maybe you should change your concept a little and make it so that you click and drag with left mouse button and when you want to finish a line segment, you click with right mouse button.
It would look more or less like so:
void setRasterOpTest::mousePressEvent *e){
if(e->button()==Qt::LeftButton){
m_list.clear();
m_list << e->pos();
m_lastpt = e->pos();
} else if(e->button()==Qt::RightButton){
m_list << e->pos();
m_lastpt = e->pos();
}
}
{
m_lastpt = e->pos();
update();
}
void setRasterOpTest
::mouseReleaseEvent(QMouseEvent *e
){ if(e->button()==Qt::LeftButton()){
if(m_list.size()==1 && (e->pos()-m_list[0]).manhattanLength()<5){
m_list.clear();
update();
return;
}
m_list << e->pos();
update();
}
}
//... (do regular stuff here)
if(!m_list.isEmpty()){
painter.save();
painter.setPen(Qt::black);
painter.drawLines(m_list);
painter.setPen(Qt::red);
painter.drawLine(m_list[m_list.size()-1], m_lastpt);
painter.restore();
}
}
void setRasterOpTest::mousePressEvent *e){
if(e->button()==Qt::LeftButton){
m_list.clear();
m_list << e->pos();
m_lastpt = e->pos();
} else if(e->button()==Qt::RightButton){
m_list << e->pos();
m_lastpt = e->pos();
}
}
void setRasterOpTest::mouseMoveEvent( QMouseEvent *e )
{
m_lastpt = e->pos();
update();
}
void setRasterOpTest::mouseReleaseEvent(QMouseEvent *e){
if(e->button()==Qt::LeftButton()){
if(m_list.size()==1 && (e->pos()-m_list[0]).manhattanLength()<5){
m_list.clear();
update();
return;
}
m_list << e->pos();
m_lastpt = QPoint();
update();
}
}
void setRasterOpTest::paintEvent(QPaintEvent *e){
//... (do regular stuff here)
if(!m_list.isEmpty()){
painter.save();
painter.setPen(Qt::black);
painter.drawLines(m_list);
painter.setPen(Qt::red);
painter.drawLine(m_list[m_list.size()-1], m_lastpt);
painter.restore();
}
}
To copy to clipboard, switch view to plain text mode
EDIT: A complete working example is attached.
Bookmarks