❝实现拖拽图片到窗口显示,如果图片过大会出现滚动条,让看图片更方便。 ❞
实现
- 使用QLabel显示图片。
- 使用QScrollArea实现图片过大时的滚动视图。
- 拖拽图片到窗口重写
dragEnterEvent
和dropEvent
接口实现。注意:需要设置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;
};