painter->setPen(Qt::green) painter->setOpacity(1.0)

探讨了在绘图应用中,setPen和setOpacity方法的性能差异,建议在可能的情况下使用更快的setOpacity方法来提升绘图效率。

问题:setPen、setOpacity 两个方法性能相差很大。

方法:如果能替换使用的话,用更快的 setOpacity。

inline void drawWatermark(QWidget* widget) { // setWindowOpacity(0.6); //设置水印透明度,这句其实是设置窗口透明度的 QFont font; font.setFamily("Microsoft YaHei");//设置水印文本字体 font.setPointSize(14);//设置水印文本带下 font.setItalic(false);//设置水印字体是否要斜体 int watermark_width_ = 500;//设置水印区域的宽,如果比较窄,字体较多会自动换行 int watermark_height_ = 300;//设置水印区域的高度 int watermark_inclination_angle_ = 23.0;//水印旋转角度 //QString content = QString("%1 %2 %3 %4").arg("zhangsan*&^%$#@!~(,/.';)").arg("192.168.45.123").arg("\n").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")); QString content = QString("%1").arg("第五事业部第四产品部版权所有"); qreal ang = -watermark_inclination_angle_; //逆时针旋转 QScreen *screen = qApp->primaryScreen(); int width= screen->size().width(); int height= screen->size().height(); int project_Y = abs(this->width() * sin(ang)) + abs(this->height() * sin(ang));//原图像Y坐标在新坐标系Y轴上的投影长度 int project_X = abs(this->height()*sin(ang)) + abs(this->width()*cos(ang));//原图像x坐标在新坐标系x轴上的投影长度 int x_step = watermark_width_; int y_step = watermark_height_; int row_count= width/ y_step;//水印写多少行 int col_count= height/ x_step + 10;//水印写多少列 因为旋转了,如果不多加会导致水印缺少一块 for (int r = 0; r < row_count; r++) { for (int c = 0; c < col_count; c++) { QPainter p(this);//绘制水印文本,其实水印就是文本 p.setFont(font);//设置文本字体 p.setPen("#DDDDDD");//水印字体颜色为DDDDDD灰色 p.translate(x_step * c, y_step * r);//对水印进行复制 p.rotate(ang); p.drawText(QRect(0, 0, watermark_width_, watermark_height_), Qt::TextWordWrap, content); } } }提示错误 error: Invalid use of 'this' outside of a non-static member function
最新发布
08-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值