重写resizeEvent(这个按需重写)、dragEnterEvent(拖拽事件函数)、dropEvent(放下事件函数),可以将本地图片拖拽到label标签中
?
#include "widget.h"
#include "ui_widget.h"
#include <QDragEnterEvent>
#include <QMimeData>
#include <QFileInfo>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setAcceptDrops(true);
ui->plainTextEdit->setAcceptDrops(false);
ui->label->setAcceptDrops(false);
ui->label->setScaledContents(true);
}
Widget::~Widget()
{
delete ui;
}
void Widget::resizeEvent(QResizeEvent *event)
{
QSize sz = ui->plainTextEdit->size();
ui->plainTextEdit->move(5, 5);
ui->label->move(5, sz.height()+10);
ui->plainTextEdit->resize(this->width()-10, sz.height());
ui->label->resize(this->width()-10, this->height()-sz.height()-20);
event->accept();
}
void Widget::dropEvent(QDropEvent *event)
{
QString fullPath = event->mimeData()->urls().at(0).path();
fullPath = fullPath.right(fullPath.length()-1);
QPixmap pixmap(fullPath);
ui->label->setPixmap(pixmap);
event->accept();
}
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
ui->plainTextEdit->clear();
ui->plainTextEdit->appendPlainText("dragEvent事件,mimeData的format:");
for(auto &item : event->mimeData()->formats()){
ui->plainTextEdit->appendPlainText(item);
}
ui->plainTextEdit->appendPlainText("dragEvent事件,mimeData的urls:");
for(auto &item : event->mimeData()->urls()){
ui->plainTextEdit->appendPlainText(item.path());
}
if(event->mimeData()->hasUrls()){
QString filename = event->mimeData()->urls().at(0).fileName();
QFileInfo fileInfo(filename);
QString ex = fileInfo.suffix().toUpper();
if(ex == "JPG"){
event->acceptProposedAction();
} else {
event->ignore();
}
} else {
event->ignore();
}
}