Qt设计的一个图片查看器

所实现的结果如下:

在这里插入图片描述

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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值