我要实现沿着鼠标点击的点画线,具体是先在窗口上画点,然后点击一个按钮(也就是触发path函数),即可形成一条蓝色的线;继续在窗口画点,点击同样的按钮,即可形成一条红色的线。现在的问题是可以画出蓝色的线,当继续画点时,点可以正常画出,但是点击按钮后,无法形成红线,具体代码如下:




------解决思路----------------------
这,
你代码还搞图片上来,别人想复制帮你试试都不行
------解决思路----------------------
我是楼主,,,,求解决求解决

void MainWindow::paintEvent(QPaintEvent *)
{ QPainter pp(this);
QPen pen,pen1,pen2;
pen.setStyle(Qt::SolidLine);
pen.setWidth(2);
pen.setBrush(Qt::blue);
pen.setJoinStyle(Qt::RoundJoin);
pen.setCapStyle(Qt::RoundCap);
pen1.setStyle(Qt::SolidLine);
pen1.setWidth(2);
pen1.setBrush(Qt::red);
pen1.setJoinStyle(Qt::RoundJoin);
pen1.setCapStyle(Qt::RoundCap);
pen2.setStyle(Qt::SolidLine);
pen2.setWidth(2);
pen2.setBrush(Qt::green);
pen2.setJoinStyle(Qt::RoundJoin);
pen2.setCapStyle(Qt::RoundCap);
if(f2==1){
pp.drawEllipse(Point,2,2);
}
if(f3==1)
{
QPainterPath ppath;
ppath.moveTo(x0[0],y0[0]);
int draw;
for(draw=0;draw<count;draw++)
{
ppath.lineTo(x0[draw],y0[draw]);
}
pp.setPen(pen);
pp.drawPath(ppath);
f3 = 0;
}
if(f8==1){
QPainterPath ppath1;
ppath1.moveTo(x1[0],y1[0]);
int draw1;
for(draw1=0;draw1<count1;draw1++)
{
ppath1.lineTo(x1[draw1],y1[draw1]);
}
pp.setPen(pen1);
pp.drawPath(ppath1);
f8=0;
}
if(f9==1){
QPainterPath ppatht;
ppatht.moveTo(xt[0],yt[0]);
int drawt;
for(drawt=0;drawt<count;drawt++)
{
ppatht.lineTo(xt[drawt],yt[drawt]);
}
pp.setPen(pen2);
pp.drawPath(ppatht);
f9=0;
}
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if((event->button()==Qt::LeftButton)&&f1==1)
{
if(f6==1){
Point = event->pos();
x0[dot]=event->x();
y0[dot]=event->y();
dot++;
count++;
f2=1;
update();
}
if(f6==0)
{
Point = event->pos();
x1[dot1]=event->x();
y1[dot1]=event->y();
dot1++;
count1++;
f2=1;
update();
}
}
}
void MainWindow::path()
{
if(f7==1){
f3 = 1;
f2 = 0;
f6 = 0;
f7 = 0;
update();
}
if(f7==0){
f2 = 0;
f8 = 1;
f6 = 1;
update();
}
}
------解决思路----------------------
你这f全是标志位?看的有点晕,再一次画的时候能画红线也就是能满足你的f8的那个条件,自己打断点调试,
------解决思路----------------------
我是楼主,,,,求解决求解决
void MainWindow::paintEvent(QPaintEvent *)
{ QPainter pp(this);
QPen pen,pen1,pen2;
pen.setStyle(Qt::SolidLine);
pen.setWidth(2);
pen.setBrush(Qt::blue);
pen.setJoinStyle(Qt::RoundJoin);
pen.setCapStyle(Qt::RoundCap);
pen1.setStyle(Qt::SolidLine);
pen1.setWidth(2);
pen1.setBrush(Qt::red);
pen1.setJoinStyle(Qt::RoundJoin);
pen1.setCapStyle(Qt::RoundCap);
pen2.setStyle(Qt::SolidLine);
pen2.setWidth(2);
pen2.setBrush(Qt::green);
pen2.setJoinStyle(Qt::RoundJoin);
pen2.setCapStyle(Qt::RoundCap);
if(f2==1){
pp.drawEllipse(Point,2,2);
}
if(f3==1)
{
QPainterPath ppath;
ppath.moveTo(x0[0],y0[0]);
int draw;
for(draw=0;draw<count;draw++)
{
ppath.lineTo(x0[draw],y0[draw]);
}
pp.setPen(pen);
pp.drawPath(ppath);
f3 = 0;
}
if(f8==1){
QPainterPath ppath1;
ppath1.moveTo(x1[0],y1[0]);
int draw1;
for(draw1=0;draw1<count1;draw1++)
{
ppath1.lineTo(x1[draw1],y1[draw1]);
}
pp.setPen(pen1);
pp.drawPath(ppath1);
f8=0;
}
if(f9==1){
QPainterPath ppatht;
ppatht.moveTo(xt[0],yt[0]);
int drawt;
for(drawt=0;drawt<count;drawt++)
{
ppatht.lineTo(xt[drawt],yt[drawt]);
}
pp.setPen(pen2);
pp.drawPath(ppatht);
f9=0;
}
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if((event->button()==Qt::LeftButton)&&f1==1)
{
if(f6==1){
Point = event->pos();
x0[dot]=event->x();
y0[dot]=event->y();
dot++;
count++;
f2=1;
update();
}
if(f6==0)
{
Point = event->pos();
x1[dot1]=event->x();
y1[dot1]=event->y();
dot1++;
count1++;
f2=1;
update();
}
}
}
void MainWindow::path()
{
if(f7==1){
f3 = 1;
f2 = 0;
f6 = 0;
f7 = 0;
update();
}
if(f7==0){
f2 = 0;
f8 = 1;
f6 = 1;
update();
}
}
你这f全是标志位?看的有点晕,再一次画的时候能画红线也就是能满足你的f8的那个条件,自己打断点调试,
另外还有,你的鼠标事件是满足左键和那个f1(不知道f1是做什么的),然后你的这个path()函数应该也是鼠标左键吧,这样你那个鼠标事件相当于会调用2次,然后又加上你这么多标志位,我觉得不乱才怪,我个人感觉是这样的,具体的还要调试,你自己调试一下你看你的这个鼠标事件会不会进入2次。