所实现的结果如下:
主要是使用拖放事件:QDragEnterEvent/QDropEvent
类为QMimeData
具体实现如下:
类的定义:
class Widget : public QWidget
{
Q_OBJECT
private:
QLabel* label;
QPixmap pixmap;
public:
Widget(QWidget *parent = 0);
~Widget();
protected:
void dragEnterEvent(QDragEnterEvent* event);
void dropEvent(QDropEvent* event);
void resizeEvent(QResizeEvent* event);
};
这里主要定义图片处理QPixmap类和图片显示的QLabel类。
对dragEnterEvent进行了重新如下:
void Widget::dragEnterEvent(QDragEnterEvent *event)
{
QStringList accepted_file_types;
accepted_file_types.append("jpg");
accepted_file_types.append("png");
accepted_file_types.append("bmp");
//检测拖到对象是否是文件,并且是否是单个文件
if((event->mimeData()->hasUrls()) && (event->mimeData()->urls().count() == 1)){
QFileInfo file_info(event->mimeData()->urls().at(0).toLocalFile());
//检测后缀名是否正确
if(accepted_file_types.contains(file_info.suffix().toLower())){
event->acceptProposedAction();
}
}
}
函数功能指明该程序只能显示三种图片类型,分别为jpg/png/bmp.
而且拖到的对象只能是单一文件,否则无法正常显示。
对dropEvent进行重写:
void Widget::dropEvent(QDropEvent *event)
{
QFileInfo file_info(event->mimeData()->urls().at(0).toLocalFile());
if(pixmap.load(file_info.absoluteFilePath())){
label->setPixmap(pixmap.scaled(label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
else{
QMessageBox::critical(this, tr("error"), tr("The image file cannot be read!"));
}
}
拖放后,通过QLabel类将图片显示出来。