• 4392阅读
  • 7回复

请教如何才能做到方框,无填充时鼠标点击选不中,实心填充时才能选中 [复制链接]

上一主题 下一主题
离线hnwdx
 

只看楼主 倒序阅读 楼主  发表于: 2011-08-07
请教如何才能做到方框,无填充时鼠标点击选不中,实心填充时才能鼠标点击选中。
当然点边线一直都可以选中。
谢谢。我画的空心的,但总是点中间还是能选中。
离线jdwx

只看该作者 1楼 发表于: 2011-08-07
回 楼主(hnwdx) 的帖子
用方形的rect-边框=内部rect,
判断mousepoint在内部rect里面?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线hnwdx

只看该作者 2楼 发表于: 2011-08-07
那还要判断画刷是否为填充或未填充吧,如果用表格画线填充的画刷,就无法判断了啊,我想要的结果是像一些软件那样,画线的地方可选中,透明的地方不可选中。
谢谢了。
离线hnwdx

只看该作者 3楼 发表于: 2011-08-08
如果能获取到当前元素的像素状况就好了,一看无像素就透,但如何做到呢?
离线xinqingfly

只看该作者 4楼 发表于: 2011-08-08
重载shape()函数的时候用QPainterPathStroker处理一下是否填充的问题
菜鸟也是鸟
离线sbtree
只看该作者 5楼 发表于: 2011-08-09
4楼的做法表示赞同
windows 7 + VC++2008 + Qt4.5.2
离线hnwdx

只看该作者 6楼 发表于: 2011-08-10
  
// 填充方式
QPainterPath GraphicsRectItem::shape() const
{
    QPainterPathStroker stroker;
    QPainterPath lpath;
    stroker.setWidth(4.0);
    lpath.addRect(boundingRect());
    return stroker.createStroke(lpath);

}
基本搞定,如何判断画刷啊!!
离线hnwdx

只看该作者 7楼 发表于: 2011-08-11
// 填充方式
QPainterPath GraphicsRectItem::shape() const
{
    if (brush().style() != Qt::NoBrush)
    {
        return QGraphicsRectItem::shape();
    }

    QPainterPathStroker stroker;
    QPainterPath lpath;
    stroker.setWidth(4.0);
    lpath.addRect(boundingRect());
    return stroker.createStroke(lpath);
}
就这样了,结贴。。
快速回复
限100 字节
 
上一个 下一个