如何在label上手绘自己的图形

时间:2021-07-01 19:41:52
void carMainWindow::paintEvent(QPaintEvent *p)
{
/*QPainter painter(ui.Oribit_PicShowLabel);*/
if (isShowOribit)
{
QPixmap image("E:\\QtPractise\\carMainWindow\\carMainWindow\\Resources\\pic.png");
image.fill(Qt::transparent);
/*QPixmap image;*/
QPainter painter(this);
painter.begin(&image);
painter.drawRoundedRect(50, 70, 128, 128, 10, 10);

ui.Oribit_PicShowLabel->setPixmap(image); //在Oribit_PicShowLabel上显示图片
update();
painter.end();
isShowOribit=false;
}
}          手绘图形在界面上没有显示

10 个解决方案

#1


顶一下    望会的人指点一下

#2


void MyLabel::paintEvent(QPaintEvent *event)
{
        QLabel::paintEvent(event);

        QPainter painter(this);
        QPixmap pixmap("image.png");
        painter.drawPixmap(QRect(10, 10, 20, 30), pixmap);
}

这样就在label的 (10, 10)点绘出一个 宽20, 高30的 image.png图片

别在 paintEvent 函数里调用update(),小心无限递归

#3


引用 2 楼 Final_Mystery 的回复:
void MyLabel::paintEvent(QPaintEvent *event)
{
        QLabel::paintEvent(event);

        QPainter painter(this);
        QPixmap pixmap("image.png");
        painter.drawPixmap(QRect(10, 10, 20, 30), pixmap);
}

这样就在label的 (10, 10)点绘出一个 宽20, 高30的 image.png图片

别在 paintEvent 函数里调用update(),小心无限递归
  
你好,谢谢你的回复    我想说这个是重新写一个类Mylabel继承于QLabel是吧?      那在主程序里面怎么调用呢?    

#4


引用 3 楼 u013375122 的回复:
Quote: 引用 2 楼 Final_Mystery 的回复:

void MyLabel::paintEvent(QPaintEvent *event)
{
        QLabel::paintEvent(event);

        QPainter painter(this);
        QPixmap pixmap("image.png");
        painter.drawPixmap(QRect(10, 10, 20, 30), pixmap);
}

这样就在label的 (10, 10)点绘出一个 宽20, 高30的 image.png图片

别在 paintEvent 函数里调用update(),小心无限递归
  
你好,谢谢你的回复    我想说这个是重新写一个类Mylabel继承于QLabel是吧?      那在主程序里面怎么调用呢?    
新继承的类和QLabel一样使用就好,只不过加上了你自己的处理的东西。

#5


图片最好不要在paintEvent里面加载

#6


引用 5 楼 jinlian_152 的回复:
图片最好不要在paintEvent里面加载
不是现成的图片    是自己绘制上去的   有什么好的建议不?

#7


你的用意是什么?, 
1、从代码上看应该可以显示出image.png图片,没有显示是你的图片路径不对。与exe文件不再同一目录下,如果是资源必须加冒号.
2、你自己绘制上去是啥东西,是获取哪的图片数据还是什么?

#8


不好意思,看错代码了,你的问题是动态设置LABEL的图标,不应该在重绘中去设置呀。

#9


引用 8 楼 IBM123 的回复:
不好意思,看错代码了,你的问题是动态设置LABEL的图标,不应该在重绘中去设置呀。
想法是加载一个label   然后设置它的透明色为透明      然后在其上面画图。。。但好像有点问题   画不出来

#10


引用 6 楼 u013375122 的回复:
Quote: 引用 5 楼 jinlian_152 的回复:

图片最好不要在paintEvent里面加载
不是现成的图片    是自己绘制上去的   有什么好的建议不?


我的意思是图片加载很占cpu的,就像楼上面说的,你在paintEvent里面调用update可能形成递归,然后每次都加载一张图片,就会导致cpu占用率很高,一般应该把需要的资源提前加载好,比如放到初始化里面或者构造函数里面。绘图的话二楼那样不行么?

#1


顶一下    望会的人指点一下

#2


void MyLabel::paintEvent(QPaintEvent *event)
{
        QLabel::paintEvent(event);

        QPainter painter(this);
        QPixmap pixmap("image.png");
        painter.drawPixmap(QRect(10, 10, 20, 30), pixmap);
}

这样就在label的 (10, 10)点绘出一个 宽20, 高30的 image.png图片

别在 paintEvent 函数里调用update(),小心无限递归

#3


引用 2 楼 Final_Mystery 的回复:
void MyLabel::paintEvent(QPaintEvent *event)
{
        QLabel::paintEvent(event);

        QPainter painter(this);
        QPixmap pixmap("image.png");
        painter.drawPixmap(QRect(10, 10, 20, 30), pixmap);
}

这样就在label的 (10, 10)点绘出一个 宽20, 高30的 image.png图片

别在 paintEvent 函数里调用update(),小心无限递归
  
你好,谢谢你的回复    我想说这个是重新写一个类Mylabel继承于QLabel是吧?      那在主程序里面怎么调用呢?    

#4


引用 3 楼 u013375122 的回复:
Quote: 引用 2 楼 Final_Mystery 的回复:

void MyLabel::paintEvent(QPaintEvent *event)
{
        QLabel::paintEvent(event);

        QPainter painter(this);
        QPixmap pixmap("image.png");
        painter.drawPixmap(QRect(10, 10, 20, 30), pixmap);
}

这样就在label的 (10, 10)点绘出一个 宽20, 高30的 image.png图片

别在 paintEvent 函数里调用update(),小心无限递归
  
你好,谢谢你的回复    我想说这个是重新写一个类Mylabel继承于QLabel是吧?      那在主程序里面怎么调用呢?    
新继承的类和QLabel一样使用就好,只不过加上了你自己的处理的东西。

#5


图片最好不要在paintEvent里面加载

#6


引用 5 楼 jinlian_152 的回复:
图片最好不要在paintEvent里面加载
不是现成的图片    是自己绘制上去的   有什么好的建议不?

#7


你的用意是什么?, 
1、从代码上看应该可以显示出image.png图片,没有显示是你的图片路径不对。与exe文件不再同一目录下,如果是资源必须加冒号.
2、你自己绘制上去是啥东西,是获取哪的图片数据还是什么?

#8


不好意思,看错代码了,你的问题是动态设置LABEL的图标,不应该在重绘中去设置呀。

#9


引用 8 楼 IBM123 的回复:
不好意思,看错代码了,你的问题是动态设置LABEL的图标,不应该在重绘中去设置呀。
想法是加载一个label   然后设置它的透明色为透明      然后在其上面画图。。。但好像有点问题   画不出来

#10


引用 6 楼 u013375122 的回复:
Quote: 引用 5 楼 jinlian_152 的回复:

图片最好不要在paintEvent里面加载
不是现成的图片    是自己绘制上去的   有什么好的建议不?


我的意思是图片加载很占cpu的,就像楼上面说的,你在paintEvent里面调用update可能形成递归,然后每次都加载一张图片,就会导致cpu占用率很高,一般应该把需要的资源提前加载好,比如放到初始化里面或者构造函数里面。绘图的话二楼那样不行么?