向QWidget中添加图片,并使图片随窗体大小缩放
来源:互联网 发布:淘宝怎么设置地区运费 编辑:程序博客网 时间:2024/05/17 04:40
向QWidget中添加图片有多种方式,其中一种方法如下:
// 部分核心代码片段 在Qt 5.7中编译通过QWidget * widget = new QWidget;widget->setAtuoFillBackground(true);QImage image;QPalette palette;image.load("picture_path/name.png"); // 指定图片所在位置及图片名palette.setBrush(this->backgroundRole(),QBrush(image));widget->setPalette(palette);
这样就可以在QWidget上添加一张图片了。但是,我们发现这样简单的处理,是有问题的。例如,代码刚运行起来,显示可能是正常的,但当我们改变窗体大小的时候,图片显示效果和想象中的开始有些差别了,例如,图片可能并没有填充,而是平铺等等。这种情况,可能是图片的分辨率刚好和窗体默认大小相当,当窗体大小更改后,二者不再相适应所引起的。要解决这个问题,我们需要在窗体大小变更后,获取窗体大小,并用它将图片的大小重新设置一次。
基本上有两种方式来实现这个效果,其一是重新实现resizeEvent(QResizeEvent * event)函数;其二是通过添加事件监视器的方式。
方式一:重新实现resizeEvent
class MyPicture : public QMainWindow{ Q_OBJECTpublic: explicit MyPicture(QWidget * parent = 0) : QWidget(parent) { widget = new QWidget; this->setCentralWidget(widget); hboxlayout = new QHBoxLayout(widget); setAutoFillBackground(true); } void resizeEvent(QResizeEvent *event) { Q_UNUSED(event) QImage image; QPalette palette; image.load("图片路径及名称"); palette.setBrush(this->backgroundRole(), QBrush(image.scaled(this->size())); this->setPalette(palette); } ...... // other operationprivate: QWidget * widget; QHBoxLayout * hboxlayout;};
方式二:添加事件监视器
假定自定义了一个类class_A,但没有重写resizeEvent,我们可以先写一个简单的、如下所示的类:
class MyFilterObject : public QObject{ Q_OBJECTpublic: explicit MyFilterObject(QObject * parent = 0) : QObject(parent) {} bool eventFilter(QObject * watched, QEvent * event) { if (QEvent::Resize == event->type()) { QWidget * widget = qobject_cast<QWidget *>(watched); QImage image; QPalette palette; image.load(":/image/test.png"); palette.setBrush(widget->backgroundRole(), QBrush(image.scaled(widget->size(), Qt::IgnoreAspectRatio, Qt::FastTransformation))); widget->setAutoFillBackground(true); widget->setPalette(palette); } }}
然后在自定义的类class_A的相关函数中添加如下代码:
void class_A::foo(){ ... QWidget * widget = new QWidget; MyFilterObject * filter = new MyFilterObject; QEvent * event = new QEvent(QEvent::Resize); widget->installEventFilter(filter); // 安装监视器 filter->eventFilter(widget, event); ...}
使用二者中的任何一个,再次运行程序,当改变窗体大小时,发现图片大小随着窗体的改变而变化了。有一个问题,就是能明显的感觉到图片缩放是有延迟的。或许有更好的实现方式,还请知道的小伙伴不吝赐教!在此谢过先(^_^)
阅读全文
0 0
- 向QWidget中添加图片,并使图片随窗体大小缩放
- Android 代码中动态添加图片使图片缩放并保持宽高比
- 随窗口大小变化的圆 /*向窗体拖放图片*/
- 给jlable添加图片,并使图片适应jlable大小
- MaskDown中添加图片定义大小并居中问题解决
- 向面板中添加图片
- 向AD中添加图片
- 向EditText中添加图片
- 向JPanel中添加图片
- 取得图片缩放大小。
- 任意大小缩放图片
- 按大小缩放图片
- 向数据库中添加图片,显示图片
- QT让一个图片随窗体缩放
- QT让一个图片随窗体缩放
- 缩放图片并加载到内存中
- 缩放图片并加载到内存中
- 缩放图片并保存
- Week Four
- MyBatis Mapper XML文件详解
- 392. Is Subsequence
- 第五周项目三
- C/C++ 第五周线性表 项目(三)括号的匹配
- 向QWidget中添加图片,并使图片随窗体大小缩放
- jquery.form.js的ajax提交,CKEditor编辑器内容丢失问题的解决方法!
- 欢迎使用CSDN-markdown编辑器
- 微信JSSDK-php-签名实现
- 第十二周项目1-验证算法(1)
- eclipse用户名的设置
- Cf252中子发射能谱模型
- 第十二周项目二
- Jenkins && Pipeline Public/Private Key errors