• 1998阅读
  • 9回复

[提问]画线第一条线宽大小不一 [复制链接]

上一主题 下一主题
离线草长莺飞
 

只看楼主 倒序阅读 楼主  发表于: 2020-03-17
继承QWidget,自绘制线发现第一条线线宽少了一个像素



void GridCanvas::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    QPen pPenSolid;
    pPenSolid.setStyle(Qt::SolidLine);    //实线笔
    pPenSolid.setWidth(2);

    painter.setPen(pPenSolid);
    
    QRect r = this->rect();
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            int x1 = r.left() + (j* r.width() / 3);
            int x2 = r.left() + (j + 1)* r.width() / 3;

            int y1 = r.top() + i * r.height() / 3;
            int y2 = y1;

            painter.drawLine(x1,y1,x2,y2);
        }
    }

}
离线maxlogo

只看该作者 1楼 发表于: 2020-03-17
第一条线超出了widget外面了,你y1多加几个像素就可以看到了
个人博客:
简书:https://www.jianshu.com/u/14fa805306bd
CSDN:https://blog.csdn.net/qq10097355
思否:https://segmentfault.com/u/lowbees/articles
离线草长莺飞

只看该作者 2楼 发表于: 2020-03-19
回 maxlogo 的帖子
maxlogo:第一条线超出了widget外面了,你y1多加几个像素就可以看到了 (2020-03-17 18:31) 

是的  我嘉一个像素都能显示出来了   但为什么超出了widget外面了呢,坐标系不是从(0,0)开始?
离线dbzhang800

只看该作者 3楼 发表于: 2020-03-19
你要在高度为x处画一条宽度为2w的水平线,你是期望它的高度范围是

x-w ~ x+w

还是

x, x ~ 2w

亦或是

x-2w, x
离线草长莺飞

只看该作者 4楼 发表于: 2020-03-19
回 dbzhang800 的帖子
dbzhang800:你要在高度为x处画一条宽度为2w的水平线,你是期望它的高度范围是
x-w ~ x+w
还是
....... (2020-03-19 12:01) 

x, x ~ 2w
离线yuyu414

只看该作者 5楼 发表于: 2020-03-19
可以看一下QPainter的文档,因为pen width的影响,默认是把pen width的中间作为起点,这样就导致有一半的pen width 在< 0的地方。
离线草长莺飞

只看该作者 6楼 发表于: 2020-03-19
回 yuyu414 的帖子
yuyu414:可以看一下QPainter的文档,因为pen width的影响,默认是把pen width的中间作为起点,这样就导致有一半的pen width 在< 0的地方。 (2020-03-19 16:17) 

嗯 ,是的。应该就是它qt绘制渲染方式影响:

当使用一个拥有偶数像素的画笔进行渲染时,像素会在数学定义的点的周围对称渲染;而当使用一个拥有奇数像素的面笔进行渲染时,首先按照偶数对称绘制,最后一个像素会被渲染到数学定义的点的右边和下边。

知道有可以设置渲染方式,不管是多宽,渲染都以右下角为起始点么
离线dbzhang800

只看该作者 7楼 发表于: 2020-03-19
回 草长莺飞 的帖子
草长莺飞:嗯 ,是的。应该就是它qt绘制渲染方式影响:
当使用一个拥有偶数像素的画笔进行渲染时,像素会在数学定义的点的周围对称渲染;而当使用一个拥有奇数像素的面笔进行渲染时,首先按照偶数对称绘制,最后一个像素会被渲染到数学定义的点的右边和下边。
....... (2020-03-19 17:25) 

这种要求,画实心矩形不就行了?
离线草长莺飞

只看该作者 8楼 发表于: 2020-03-20
回 dbzhang800 的帖子
dbzhang800:这种要求,画实心矩形不就行了? (2020-03-19 22:06) 

那就不是画线了,不是想要的了  哎  我太难了
离线yuyu414

只看该作者 9楼 发表于: 2020-03-23
回 草长莺飞 的帖子
草长莺飞:嗯 ,是的。应该就是它qt绘制渲染方式影响:
当使用一个拥有偶数像素的画笔进行渲染时,像素会在数学定义的点的周围对称渲染;而当使用一个拥有奇数像素的面笔进行渲染时,首先按照偶数对称绘制,最后一个像素会被渲染到数学定义的点的右边和下边。
....... (2020-03-19 17:25) 

QPainter::Antialiasing
这个可以,但是他会有一些平滑的算法,具体你可以试试看
快速回复
限100 字节
 
上一个 下一个