【问题标题】:How to delete content from QPixMap如何从 QPixMap 中删除内容
【发布时间】:2016-04-26 12:33:22
【问题描述】:

我为教育目的创建了简单的图像查看器。 我有类 ScreenImage,其中包括用于加载图像的 QPixMap。对于从驱动器加载图像,我使用 QPixMap::load()。

class ScreenImage : public QWidget
{
    Q_OBJECT

    public:
          ...

    bool loadImage(const QString &filename);


    QScrollArea *_pScrollArea;
    QLabel *_pLabel;
    QPixmap *_pPixmap;

    ...
};

问题:如何删除已经加载到QPixMap中的图片?如果我在同一个 QPixMap 中加载了新图像,那么之前加载的图像的内存会丢失吗? (会不会内存泄漏)?

【问题讨论】:

    标签: qt


    【解决方案1】:

    您不需要在堆上分配QPixmap。将QPixmap 视为int。你会在课堂上使用指向int 的指针吗?

    因此:

    class MyWidget : public QWidget {
         QPixmap m_pixmap;
    public:
         void loadFile(const QString &path) {
               m_pixmap.load(path);
         }
    };
    

    是正确的,不会泄露任何东西。

    【讨论】:

      【解决方案2】:

      首先,我推荐使用 QImage。 QImage 使用implicit sharing 内存,因此您在使用时不必新建或深复制图像。要取消分配 QImage,只需将其分配给一个空图像:

      QImage img;
      ...
      img = QImage();
      

      为了进一步了解,我建议阅读difference between QImage & QPixmap。简而言之:不要在 gui 线程之外使用 QPixmap。

      【讨论】:

        猜你喜欢
        • 2014-06-30
        • 1970-01-01
        • 2013-05-05
        • 2019-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多