• 4883阅读
  • 2回复

QT如何进行区域操作? [复制链接]

上一主题 下一主题
离线bayerfly
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-01
我用QRegion合并几个相邻的矩形。得到的结果仍然是分开的路径,怎样把合并的结果变成一条路径?

    QPainterPath path;
    QRect rect1(50,50,20,20);
//    QRect rect2(20,70,60,20);
//    QRect rect3(30,90,80,20);
    QRect rect2(50,70,20,20);
    QRect rect3(50,90,20,20);

    QRegion p1(rect1);
    QRegion p2(rect2);
    QRegion p3(rect3);
    QRegion p;

    p=p.united ( p1 );
    p=p.united ( p2 );
    p=p.united ( p3 );
    path.addRegion(p);
    int size=path.elementCount();
    qDebug()<<"size::::::"<<size;
    for(int i=0;i<size;i++)
    {
        QPainterPath::Element e=path.elementAt(i);
        qDebug()<<e.isMoveTo()<<e.x<<";"<<e.y;
    }
离线sbtree
只看该作者 1楼 发表于: 2011-04-01
在你的代码行 path.addRegion(p);之后加一句path = path.simplified(); 就应该可以了

其实你自己的代码本身就符合你的要求,最后的path是
MoveToElement  (50,50), LineToElement (70,50), LineToElement (70,110), LineToElement (50,110), LineToElement (50,50)
这不正是一个最终合成的矩形吗?
如果多个矩形合成之后形成凸多边形,那么就必须加我说的那一句,才能保证合成的path是连续的
[ 此帖被sbtree在2011-04-01 17:28重新编辑 ]
windows 7 + VC++2008 + Qt4.5.2
离线linxy

只看该作者 2楼 发表于: 2011-04-05
我觉得可以用QRegion里边重载的那些!&+-^| 还有    intersected,xored,united对多个区域进行合并操作
快速回复
限100 字节
 
上一个 下一个