QT绘矢量图时窗口选择图素的实现

QT绘矢量图时窗口选择图素的实现

本人在编写一段选择对象的程序,场景是用鼠标拉出一个透明的窗口,然后判断哪些对象被选中。直观的想法是用fillRect,并让填充的颜色透明。开发环境:VS2010+QT5.5.1

准备

Widget中加label控件作为绘图窗口。在label的paintEvent函数中编写绘图内容。程序已经写了很多,不好都上传分享给大家,仅贴出相关部分代码。

问题

在用Painter 的FillRect绘制窗口时画刷提供的几种填充样式都不满意。部分代码如下:
QPen p(QColor(0,0,192,128));
p.setWidth(1.);
painter.setPen§;
QBrush b(QColor(0,128,128,128),Qt::SolidPattern); // SolidPattern 不透明;
painter.setBrush(b);
painter.fillRect(aRect,Qt::SolidPattern); //也可用 Qt::Dense7Pattern

Qt::SolidPattern是不透明的,Dense7Pattern是点填充,虽然可以看到要选择的图素,但毕竟不是通用方法。

解决办法

用drawPolygon代替fillRect。
QPen p(QColor(0,0,192,128));
p.setWidth(1.);
painter.setPen§;
QBrush b(QColor(0,128,128,128),Qt::SolidPattern); // SolidPattern 不透明;
painter.setBrush(b);
QPolygonF apg;
QPointF tmpP(aRect.x(),aRect.y());apg< tmpP.setX(tmpP.x()+aRect.size().width());apg< tmpP.setY(tmpP.y()+aRect.size().height());apg< tmpP.setX(tmpP.x()-aRect).size().width());apg< painter.drawPolygon(apg,Qt::WindingFill);
青色是用鼠标拉出的窗口

总结

采用QT5的fillRect和fillPolygon采用的是不同的填充机制,pen和brush的颜色透明设置对fillRect不起作用。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部