首页 > 解决方案 > 如何保存标签的 QPixmap,该标签由其上方的另一个标签组成,该标签具有 Qpixmap

问题描述

我继承了QLabel创建自己的类QLabel,代码如下:

class myLabel : public QLabel
{
    Q_OBJECT
public:
    explicit myLabel(QWidget *parent=nullptr): QLabel(parent){ setFrameShape(QFrame::Box);}
    QLabel insideLabel;

};

如您所见,我的班级QLabel里面有一个成员。现在,我所做的是我创建了我的班级的对象,并使用它为它分配了一个图像,setPixmap()并为我班级内的成员分配了一个图像QLabel。代码如下:

    QFile file("file.png");
    ui->setupUi(this);
    //Creatig instance of my QLabel class and setting one image to it.
    myLabel *label=new myLabel(this);
    label->setPixmap(QPixmap("someImagePath"));
    
    //Assining image to my class QLabel member.
    label->insideLabel.setPixmap(QPixmap("someImagePath"));
    
    //saving file.
    label->pixmap()->save("imageName","png",-1);

因此,当我保存图像时,它只保存我的QLabel类对象的图像,QPixmap而不是保存我的两个标签图像,因为insideLabel它存在于我的标签类对象上方,因为它是它的成员。如何将我的标签的两个图像保存为一个图像。

标签: qtqt5qlabelqpixmap

解决方案


您的代码不是要保存 QLabel,而是要保存 QLabel 的 pixmap 属性,这是两个非常不同的事情。
QLabel 是可以在绘图设备上呈现的小部件。您应该阅读有关 QWidget 子系统的文档: Qt Widgets 模块

我看到您的代码存在一些问题,内部小部件没有父级,在您的情况下,我认为这是一个问题,但解释这超出了您的问题。

如果您想要将小部件呈现为图像文件,您可以执行以下操作:

 QPixmap pixmap(Widget->size());
 Widget->render(&pixmap);
 pixmap.save("widget_render_file.png");

如果要合成图像,可以直接在附加到像素图的画家上绘制,如下所示:

 QPixmap pixmap(100,100);
 QPainter painter(pixmap);
 painter.setPen (...);
 painter.drawPixmap (...);
 painter.end();
 pixmap.save(...);

您还应该查看有关 QPainter 和 QPixmap 的文档,有很多有用的绘图/绘画功能。


推荐阅读