Qt设计的一个图片查看器

用qt设计的一个图片查看器

  • 所实现的结果如下:
    • 主要是使用拖放事件:QDragEnterEvent/QDropEvent
    • 类为QMimeData
    • 具体实现如下:

所实现的结果如下:

Qt设计的一个图片查看器_第1张图片

主要是使用拖放事件: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类将图片显示出来。

你可能感兴趣的:(学习)