• 5752阅读
  • 4回复

[提问]关于qt跨平台编译运行的问题 [复制链接]

上一主题 下一主题
离线summerpeking
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-09
我做了一个画板聊天程序,在linux下运行正常,可是我把它的源代码拷贝到XP环境下编译运行后发现它不响应鼠标画图事件了。
我在鼠标画图事件里没有在update里画,而是在其余函数里画,本来我想保存画图信息的,可是后来我发现只要窗口不先最小化再最大化,窗口之间的遮挡是不会影响画板的,于是我就没有保存画图信息。
附件里面为window和linux下的源代码,都已经编译好,只要先运行serverlast,再运行clientlast即可。默认是127.0.0.1连接。
原因是否可能是因为我没有保存画图信息,而windows和linux对窗口重绘的定义不一样导致的?仅作参考。画图那一部分源代码在paintwidget.cpp里面。
请大家帮帮忙,在此先谢过了! summer.rar (2094 K) 下载次数:8
离线jdwx

只看该作者 1楼 发表于: 2011-12-09
回 楼主(summerpeking) 的帖子
void PaintWidget::mouseMoveEvent(QMouseEvent*event)
{
    if(currentShape=="pen")
    {
        endPoint=event->pos();
        QPainter painter(this);
        QPen pen;
        pen.setColor(penColor);
        painter.setPen(pen);
        painter.drawLine(startPoint,endPoint);
        emit shapeChanged("pen",startPoint,endPoint,penColor);
        startPoint=endPoint;
    }
    else
    {
        eraserSquare(event->pos(),eraserSize);
        emit shapeChanged("eraser",event->pos(),QPoint(0,0),QColor(0,0,0),
            eraserSize);
    }
}

这是paintwidget.cpp的函数,windows的Qt是不能在mouseEvent里面直接用QPainter画图,只能在painterEvent里画图。
如果你用QtCreator运行这个程序,下面的应用程序输出窗口会有提示:painter不可用
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线summerpeking
只看该作者 2楼 发表于: 2011-12-09
回 1楼(jdwx) 的帖子
抱歉了,我最初是用vi敲得,没有用qt creator,所有没有看到这个错误。我试了试确实说Painter  not   active。
setAttribute(Qt::WA_PaintOutsidePaintEvent);
在PaintWidget的构造函数里面我加上了这句话,开始在linux下也是不让我在paintEvent外面画图,我上网上搜了搜,加上这句话就可以了,在windows里面应该也有这样的设置吧,要不然只在paintEvent里面画图,那该多不爽!
我找到了这个网址:http://blog.csdn.net/godvmxi/article/details/6069869
上面说在paintEvent外面画图,那句话的设置只支持X11,嵌入式、windows、苹果什么的都不支持,这算什么事情呀,有什么解决办法吗?
离线jdwx

只看该作者 3楼 发表于: 2011-12-09
回 2楼(summerpeking) 的帖子
有一个办法:在QPixmap上画图,painterEven的时候贴上去。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线summerpeking
只看该作者 4楼 发表于: 2011-12-10
回 3楼(jdwx) 的帖子
是个办法!我试试!太感谢了!
快速回复
限100 字节
 
上一个 下一个