#include "ImgDisplay.h"
#include <QFile>
#include <QDebug>
#include <QPixmap>
#include <QPalette>
#include <QMouseEvent>
ImgDisplay::ImgDisplay(QString pictPath, QWidget *parent)
:pictPath(pictPath), QWidget(parent)
{
ui.setupUi(this);
ui.picLab->installEventFilter(this);
ui.deleteBtn->installEventFilter(this);
connect(ui.deleteBtn, &QPushButton::clicked,this, &ImgDisplay::closeSlots);
ui.deleteBtn->hide();
// 创建一个虚拟的QResizeEvent,设置期望的窗口大小
QResizeEvent event(QSize(this->width(), this->height()), size());
// 手动发送事件,触发resizeEvent函数
QCoreApplication::sendEvent(this, &event);
}
ImgDisplay::~ImgDisplay()
{
}
// 进入事件处理函数
void ImgDisplay::enterEvent(QEvent* event) {
if (event->type() == QEvent::Enter) {
// 鼠标移入控件
ui.deleteBtn->show();
//qDebug() << "enter";
}
}
// 离开事件处理函数
void ImgDisplay::leaveEvent(QEvent* event) {
if (event->type() == QEvent::Leave) {
// 鼠标移出控件
ui.deleteBtn->hide();
//qDebug() << "leave";
}
}
void ImgDisplay::resizeEvent(QResizeEvent* event)
{
// 获取新的窗口大小
QSize newSize = event->size();
ui.widget->resize(newSize.width(),20);
QImage pict(pictPath);
int pict_H = pict.height();
int pict_W = pict.width();
float ratio_HW = float(pict_H) / float(pict_W);
float ratio_WH = float(pict_W) / float(pict_H);
if (pict_H >= pict_W && ratio_HW > 2) {
pict_H = newSize.height();
pict_W = newSize.width() / ratio_HW;
ui.picLab->setGeometry(newSize.width() / 2 - pict_W / 2, 0, pict_W, pict_H);
ui.picLab->setMinimumWidth(pict_W);
ui.picLab->setMinimumHeight(pict_H);
}
else if (pict_H < pict_W && ratio_WH > 2) {
pict_W = newSize.width();
pict_H = newSize.height() / ratio_WH;
ui.picLab->setGeometry(0, newSize.height() / 2 - pict_H / 2, pict_W, pict_H);
ui.picLab->setMinimumWidth(pict_W);
ui.picLab->setMinimumHeight(pict_H);
}
else {
ui.picLab->setGeometry(0, 0, newSize.width(), newSize.height());
ui.picLab->setMinimumWidth(newSize.width());
ui.picLab->setMinimumHeight(newSize.height());
}
// 设置QLabel的大小策略为自动调整大小
ui.picLab->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
ui.picLab->setText("");
ui.picLab->setFrameShape(QFrame::Box);
ui.picLab->setScaledContents(true);
// 设置QLabel的大小策略为自动调整大小
ui.picLab->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
QPixmap pixmap = QPixmap::fromImage(pict);
// 进行缩放和显示等操作
QPixmap fitPixmap = pixmap.scaled(ui.picLab->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
ui.picLab->setPixmap(fitPixmap);
ui.picLab->setFrameShape(QFrame::NoFrame);
QWidget::resizeEvent(event); // 调用基类的resizeEvent函数,确保正常处理事件
}
void ImgDisplay::closeSlots() {
QFile file(pictPath);
if (file.exists()) {
if (file.remove()) {
qDebug() << "文件删除成功!";
}
else {
qDebug() << "无法删除文件:" << file.errorString();
}
}
else {
qDebug() << "文件不存在:" << pictPath;
}
this->close();
emit deletePict(pictPath);
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt+图片展示+自适应父节点大小+鼠标进入出现关闭按钮
共3个文件
ui:1个
h:1个
cpp:1个
需积分: 0 1 下载量 98 浏览量
2023-10-24
09:47:01
上传
评论
收藏 2KB 7Z 举报
温馨提示
Qt+图片展示+自适应父节点大小+鼠标进入出现关闭按钮
资源推荐
资源详情
资源评论
收起资源包目录
imgDispaly.7z (3个子文件)
imgDispaly
ImgDisplay.h 634B
ImgDisplay.cpp 3KB
ImgDisplay.ui 3KB
共 3 条
- 1
资源评论
这不就好起来了吗_88
- 粉丝: 20
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功