• 11845阅读
  • 10回复

QT窗口抠图问题 [复制链接]

上一主题 下一主题
离线longteng9
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-30
{-215, -215, -215, +215, 215, 215};
    static const int points2[] = {-145,-65, -145 , +145, +45,+145};
    clearMask();
    qDebug("clearMaks  -runned---------");
    QPolygon polygon1;  //该函数画一个由直线相闻的两个以上顶点组成的多边形,用当前画笔画多边形轮廓,用当前画刷和多边形填充模式填充多边形。
    QPolygon polygon2;
    polygon1.setPoints(3, points1);
    polygon2.setPoints(3, points2);
    QRegion region1(polygon1);
    QRegion region2(polygon2);
    QRegion region = region1 - region2;

    QPainterPath path;
    path.addRegion(region);
    painter->fillPath(path, QBrush(Qt::yellow));
    //setMask(region);
// setWindowFlags(Qt::FramelessWindowHint);

这段代码我用来实现一个窗体里面绘制的嵌套的三角形,我想要得到的是除去了中间三角形和外部没有划绘制图形的区域的部分,但是当我用了    //setMask(region);
// setWindowFlags(Qt::FramelessWindowHint);函数的时候图形全部都被屏蔽掉了
希望高手指点一下,我怎么实现才能得到三角板的图形呢?
[ 此帖被longteng9在2011-03-30 16:54重新编辑 ]
离线wxj120bw

只看该作者 1楼 发表于: 2011-03-31
有时间研究下
离线longteng9
只看该作者 2楼 发表于: 2011-03-31
没有人做过吗?
离线梅克斯
只看该作者 3楼 发表于: 2011-03-31
不如直接在里面再画一个白色三角形......
离线longteng9
只看该作者 4楼 发表于: 2011-03-31
回 3楼(梅克斯) 的帖子
但是那个不是我想要的,我是只想要三角板的区域,其他的都不要,还需要移动和旋转呢
离线梅克斯
只看该作者 5楼 发表于: 2011-03-31
回 4楼(longteng9) 的帖子
你可以直接写成一个三角板的独立类.....移动和旋转也实现了就是了
离线longteng9
只看该作者 6楼 发表于: 2011-03-31
原来是没有找对问题的根本,问题解决 setMask去掉的部分是因为setWindow移动了坐标上面的代码这样写是没有问题的   多谢各位关注
离线longteng9
只看该作者 7楼 发表于: 2011-04-06
问题来了,我在Dialog中绘制的图形,然后在用到了setMask函数时,遮罩的是widget的窗口,当旋转Dialog中图形的时候,widget中的遮罩不跟随旋转,导致Dialog中的图形得到的不是预期的图形,有谁知道是为什么吗?
离线robertkun

只看该作者 8楼 发表于: 2011-06-14
    setAttribute(Qt::WA_TranslucentBackground);
    setWindowFlags( Qt::FramelessWindowHint ) ;

设置了这两个函数后不用设置mask呀。

请教一个问题 :
怎样求得不同分辨率下,一厘米的长度呢?
                                              简单的生活使人快乐!
离线robertkun

只看该作者 9楼 发表于: 2011-06-14
参考楼主的绘制方法,写了一个三角尺。。没有用到mask

http://www.qtcn.org/bbs/read.php?tid=43820&displayMode=1&page=1&toread=1#tpc

                                              简单的生活使人快乐!
离线longteng9
只看该作者 10楼 发表于: 2011-07-26
回 9楼(robertkun) 的帖子
首先感谢robertkun 的回答,不同分辨率下的一厘米我没有考虑,这个是一个新手没有考虑到的东西 呵呵,但是我的三角板是这样实现的,我用的setmask是为了实现三角板中间的区域是镂空的,鼠标单击到那个区域是不会有任何反应的,相当于您的三角板以外的区域是落在了桌面上的一样,
快速回复
限100 字节
 
上一个 下一个