如何保存一个标签的 QPixmap,该标签由另一个标签组成,上面有一个 Qpixmap
How to save the QPixmap of a label which consist of one more label above it which has a Qpixmap
我继承了QLabel
创建了自己的QLabel
的class,代码如下:
class myLabel : public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent=nullptr): QLabel(parent){ setFrameShape(QFrame::Box);}
QLabel insideLabel;
};
如您所见,我的 class 里面有一个 QLabel
成员。
现在,我所做的是我创建了 class 的对象并使用 setPixmap()
为其分配了一个图像,并且还为 class 中的 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
class 对象 QPixmap
的图像,而不是保存我的两个标签图像,因为 insideLabel
是出现在 my label class 对象上方,因为它是它的成员。如何将标签的两张图片保存为一张图片。
您的代码不是在尝试保存 QLabel,而是在尝试保存 QLabel 的像素图 属性,这是两个截然不同的事情。
QLabel 是一个可以在绘图设备上呈现的小部件。您应该阅读有关 QWidget 子系统的文档:
Qt Widgets module
我发现你的代码有一些问题,内部小部件没有父级,在你的情况下我认为这是一个问题,但解释这超出了你的问题。
如果您想要将小部件呈现为图像文件,您可以这样做:
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 的文档,其中有很多有用的 drawing/painting 函数。
我刚刚将 Widget
window 中需要的部分保存为图片,下面是我的代码
label=new myLabel(this);
label->setGeometry(50,50,300,300);
label->setPixmap(QPixmap("/home/vinay/Pictures/exp.png").scaled(label->width(),label->height()));
label->insideLabel=new QLabel(this);
label->insideLabel->setGeometry(50,50,50,50);
label->insideLabel->setPixmap(QPixmap("/home/vinay/Pictures/exp2.png"));
label->insideLabel->setFrameShape(QFrame::Box);
label->insideLabel->setLineWidth(3);
//Assining image to my class QLabel member.
//saving file.
label->pixmap()->save("imageName","png",-1);
//ui->myWidget->grab().save("image.png");
QRect r(50,50,300,300);
Widget::grab(r).save("image.png");
我继承了QLabel
创建了自己的QLabel
的class,代码如下:
class myLabel : public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent=nullptr): QLabel(parent){ setFrameShape(QFrame::Box);}
QLabel insideLabel;
};
如您所见,我的 class 里面有一个 QLabel
成员。
现在,我所做的是我创建了 class 的对象并使用 setPixmap()
为其分配了一个图像,并且还为 class 中的 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
class 对象 QPixmap
的图像,而不是保存我的两个标签图像,因为 insideLabel
是出现在 my label class 对象上方,因为它是它的成员。如何将标签的两张图片保存为一张图片。
您的代码不是在尝试保存 QLabel,而是在尝试保存 QLabel 的像素图 属性,这是两个截然不同的事情。
QLabel 是一个可以在绘图设备上呈现的小部件。您应该阅读有关 QWidget 子系统的文档:
Qt Widgets module
我发现你的代码有一些问题,内部小部件没有父级,在你的情况下我认为这是一个问题,但解释这超出了你的问题。
如果您想要将小部件呈现为图像文件,您可以这样做:
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 的文档,其中有很多有用的 drawing/painting 函数。
我刚刚将 Widget
window 中需要的部分保存为图片,下面是我的代码
label=new myLabel(this);
label->setGeometry(50,50,300,300);
label->setPixmap(QPixmap("/home/vinay/Pictures/exp.png").scaled(label->width(),label->height()));
label->insideLabel=new QLabel(this);
label->insideLabel->setGeometry(50,50,50,50);
label->insideLabel->setPixmap(QPixmap("/home/vinay/Pictures/exp2.png"));
label->insideLabel->setFrameShape(QFrame::Box);
label->insideLabel->setLineWidth(3);
//Assining image to my class QLabel member.
//saving file.
label->pixmap()->save("imageName","png",-1);
//ui->myWidget->grab().save("image.png");
QRect r(50,50,300,300);
Widget::grab(r).save("image.png");