一个简单的图片浏览器

2020-07-16 10:37:05 浏览数 (1)

❝实现拖拽图片到窗口显示,如果图片过大会出现滚动条,让看图片更方便。 ❞

实现

  • 使用QLabel显示图片。
  • 使用QScrollArea实现图片过大时的滚动视图。
  • 拖拽图片到窗口重写dragEnterEventdropEvent接口实现。注意:需要设置setAcceptDrops(true)开启窗口拖拽功能。

代码

代码语言:javascript复制
#include <QScrollArea>
#include <QLabel>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QMimeData>
#include <QVBoxLayout>

class ImageView : public QWidget {
    Q_OBJECT
public:
    ImageView(QWidget *parent = NULL) : QWidget(parent)
    {
        this->setAcceptDrops(true);
        m_label = new QLabel(QStringLiteral("图片文件拖拽到此处"));
        
        /* 创建一个滚动视图 */
        QScrollArea *scrollArea = new QScrollArea();
        scrollArea->setWidget(m_label);

        QVBoxLayout *vLayout = new QVBoxLayout();
        vLayout->addWidget(scrollArea);

        this->setLayout(vLayout);
    }

protected:
    /* 拖动事件的进入操作事件 */
    void dragEnterEvent(QDragEnterEvent* event)
    {
        if (event->mimeData()->hasUrls()) {
            /* 表示可以在这个部件上拖放对象 */
            event->acceptProposedAction();
        }
        else {
            event->ignore();
        }
    }

    /* 拖动事件的释放操作事件 */
    void dropEvent(QDropEvent *event)
    {
        QString imageSource = event->mimeData()->urls().first().toLocalFile();
        m_label->setPixmap(QPixmap(imageSource));
        m_label->adjustSize();
    }

private:
    QLabel *m_label;
};

0 人点赞