QT显示图片

合集下载

Qt中图像的显示与基本操作

Qt中图像的显示与基本操作

Qt可显示基本的图像类型,利用QImage、QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放、旋转)。

1. Qt可显示的图像类型参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。

2. Qt用如何显示图像通常用QLabel显示图像,QLabel类有setPixmap()函数,可以用来显示图像。

也可以直接用QPainter 画出图像。

如果图像过大,直接用QLabel显示,将会出现有部分图像显示不出来,这时可以用Scroll Area部件。

方法:将QLabel部件放到Scroll Area部件里面,将两个采用栅格布局,当图像超出了QLabel部件大小时,就会产生滑动杆,这样图像就可以都看到了。

3. 显示的方法步骤:先打开一个图像;将图像文件加载进QImage对象中;再用QPixmap对象获得图像;最后用QLabel 选择一个QPixmap图像对象显示。

代码如下:QString filename;filename=QFileDialog::getOpenFileName(this,tr("选择图像"),"",tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));if(filename.isEmpty()){return;}else{QImage* img=new QImage;if(! ( img->load(filename) ) ) //加载图像{QMessageBox::information(this,tr("打开图像失败"),tr("打开图像失败!"));delete img;return;}ui->label->setPixmap(QPixmap::fromImage(*img));}注:也可以直接用QPixmap类的对象采用Load函数加载图像。

Qt基础教程之QTreeWidget和QDockWidget用法详解

Qt基础教程之QTreeWidget和QDockWidget用法详解

本节介绍QTreeWidget、QDockWidget的使用,以及用 QLabel 显示图片的方法。

实例 samp4_8 QTreeWidget 以 QTreeWidget 为主要组件,创建一个照片管理器,实例运行时的界面如图 1 所示。

图 1 实例Samp4_8运行时界面这个实例主要演示如下几个组件的使用方法。

•QTreeWidget 目录树组件:QTreeWidget 类是创建和管理目录树结构的类。

实例使用一个 QTreeWidget 组件管理照片目录,可以添加、删除节点,每个节点设置一个自定义类型,另外,还设置了一个自定义数据,图片节点存储完整文件名,以便单击节点时显示该图片。

•QDockWidget 停靠区域组件:QDockWidget 是可以在 QMainWindow 窗口停靠,或在桌面最上层浮动的界面组件。

本实例将一个 QTreeWidget 组件放置在QDockWidget 区域上,设置其可以在主窗口的左或右侧停靠,也可以浮动。

•QLabel 组件显示图片:右侧是一个 QScrollArea 组件,ScrollArea 上面放置一个 QLabel 组件,通过为 QLabel 设置一个 QPixmap 显示图片。

通过QPixmap 操作可进行缩放显示,包括放大、缩小、实际大小、适合宽度、适合高度等。

界面设计界面布局设计实例中的主窗口从 QMainWindow 继承而来,界面釆用可视化设计,程序功能主要用 Action 实现,主菜单和主工具栏也都由其实现。

工作区左侧是一个 QDockWidget 组件,在 DockWidget 上放置一个QTreeWidget 组件,用水平布局使 treeWidget 填充满停靠区。

工作区右侧是一个 QScrollArea 组件,QScrollArea 组件里放置一个 QLabel 组件,利用QLabel的pixmap 属性显示图片。

scrollArea 内部的组件釆用水平布局,当图片较小时,Label 显示的图片可以自动居于 scrollArea 的中间;当 Label 显示的图片超过 scrollArea 可显示区域的大小后,scrollArea 会自动显示水平或垂直方向的卷滚条,用于显示更大的区域。

Qt图片显示QGraphicsView(转载)

Qt图片显示QGraphicsView(转载)

Qt图⽚显⽰QGraphicsView(转载)原⽂来⾃:Graphics View提供了⼀个界⾯,它既可以管理⼤数量的定制2D graphical items,⼜可与它们交互,有⼀个view widget可以把这些项绘制出来,并⽀持旋转与缩放。

这个柜架也包含⼀个事件传播结构,对于在scene中的这些items,它具有双精度的交互能⼒。

Items能处理键盘事件,⿏标的按,移动、释放、双击事件,也可以跟踪⿏标移动。

Graphics View使⽤BSP树来提供对item的快速查找,使⽤这种技术,它可以实时地绘制⼤规模场景,甚⾄以百万items计。

Graphics View在Qt 4.2中被引⽤,它替代了它的前辈QCanvas。

Graphics View的体系结构Graphics View提供的是⼀种类似于Qt model-view的编程。

多个views可以监视同⼀个场景,⽽场景包含多个具有多种⼏何外形的items。

场景QGraphicsScene 表⽰Graphics View中的场景,它有以下职责:为管理⼤量的items提供⼀个快速的接⼝。

传播事件到每个item。

管理item的状态,例如选择,焦点处理。

提供未经变换的渲染功能,主要⽤于打印。

场景作为QGraphicsItem对象的容器。

通过调⽤QgraphicsScene::addItem()把这些Items加⼊到场景中。

可以使⽤众多的查找函数来获取特定的items。

QGraphicsScene:items()与它的许多重载函数可获取那些与点、矩形,多边形,向量路径等相交或是有包含有关系的items。

QGraphicsScene::itemAt()返回特定上最顶端的item。

所有的item查找函数都以出栈序列返回(也就是说,第⼀个返回的是最顶端的,最后⼀个返回的是最底端的)。

QGraphicsScene scene;QGraphicsRectItem *rect=scene.addRect(QRectF(0,0,100,100));QGraphicsItem *item=scene.itemAt(50,50);//item==rect;QGraphicsScene的事件传播结构会把场景事件投递到items,也管理多个items之间的传递。

QT显示图片的四种方法

QT显示图片的四种方法

QT显⽰图⽚的四种⽅法相关⽂章QT显⽰图⽚的⽅法有很多⼤致为label上显⽰直接画出来容器显⽰1---------------显⽰gif图⽚(label上显⽰)在QT中要显⽰GIF图⽚,不能通过单单的添加部件来完成.还需要⼿动的编写程序.⼯具:QT Creator新建⼀个⼯程,我们先在designer中,添加⼀个QLabel部件.如下图:将QLabel拉成适当⼤⼩.在类cpp函数中添加如下程序:#include "widget.h"#include "ui_widget.h"#include <QLabel>#include <QMovie>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);QMovie *movie =new QMovie("D:/Project/Qt/testclass/2.gif");ui->label->setMovie(movie);movie->start();}Widget::~Widget(){delete ui;}如下图:这⾥要注意QMovie中的路径名:"D:/Project/Qt/testclass/2.gif" 这⾥的路径斜杠和WINDOWS下是相反的.WINDOWS下默认是反斜杠.编译,运⾏就没有问题,就会看到GIF⽂件在播放了.如下图:当⽂档GIF图⽚显⽰:#include <QtGui/QApplication>#include <QLabel>#include <QMovie>int main(int argc,char*argv[]){QApplication app(argc,argv);QLabel *label =new QLabel();QMovie *movie =new QMovie("D:/Project/Qt/firstQT/2.gif"); label->setMovie(movie);movie->start();label->show();return app.exec();}2-------------------------label上显⽰图⽚------------------把你的label.png放到⼯程⽬录顶层,直接QPixmap pixmap("label.png");ui->title_label->setPixmap(pixmap);ui->title_label->show();---可以直接:label->setPixmap(QPixmap("./pic.jpg"));或者:QImage *image= new QImage("./pic.jpg");label->setPixmap(QPixmap::fromImage(image));再或者在中途换某个图像的话:QImage *image= new QImage("./pic1.jpg");label->setPixmap(QPixmap::fromImage(image)); ...........image->load("./pic2.jpg");3----------直接画出图⽚-------------------------voidlogindlg::paintEvent(QPaintEvent*){QPainterpainter(this);QPixmappix;pix.load("D:/QT/login/login/images/delta.png");painter.drawPixmap(0,0,100,33,pix);//painter.drawLine(0,0,100,100);}4-----------程序启动时的图⽚QApplication app(argc, argv);QSplashScreen *splash = new QSplashScreen;splash->setPixmap(QPixmap(":/images/splash.png"));//设置图⽚splash->show();//显⽰图⽚Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;splash->showMessage(QObject::tr("Setting up the main window..."),topRight, Qt::white);//显⽰信息MainWindow mainWin;splash->showMessage(QObject::tr("Loading modules..."),topRight, Qt::white); //显⽰信息loadModules();splash->showMessage(QObject::tr("Establishing connections..."),topRight, Qt::white); //显⽰信息establishConnections();mainWin.show();splash->finish(&mainWin);//图⽚⼀直显⽰到mainWin加载完成delete splash;//释放空间,节省内存return app.exec();来⾃:⾸先你得加载⼀张能显⽰透明的图⽚,jpg格式肯定是不⾏的,⼀般都是png还有不同的部件加载图⽚的⽅法也不太相同,⽐如:QLabel加载图⽚:C/C++ codeQString strPath=imagePath.value(day); //图⽚路径QPixmap pix(strPath);dayLabel->setPixmap(pix);QPushButton加载图⽚:C/C++ codebutton->setIcon(QIcon("toolbutton.png"));button->setIconSize(QSize(48, 48));其中setIconSize函数是⽤来截取图⽚的显⽰区域,如果没有该函数,该图⽚是被缩放的放到图⽚上⽤调⾊板加载图⽚:C/C++ codeQPalette p = palette();p.setBrush(QPalette::Button, QBrush(QPixmap("toolbutton.png")));setPalette(p);另外实现按钮的透明:C/C++ codebutton->setFlat(true);还有就是⽤绘制事件函数了:C/C++ codeQPixmap arrayImage("/home/image/array.png"); //图⽚路径QRect arrayRect(0,0,50,50); //截取图⽚区域QPainter painter;painter.drawPixmap(QPoint(100,100),arrayImage,arrayRect); //打印图⽚//=============================================================================================================================备注::1>这⾥要注意QMovie中的路径名:"D:/Project/Qt/testclass/2.gif" 这⾥的路径斜杠和WINDOWS下是相反的.WINDOWS下默认是反斜杠.。

pyqt实现在Widgets中显示图片和文字的方法

pyqt实现在Widgets中显示图片和文字的方法

pyqt实现在Widgets中显⽰图⽚和⽂字的⽅法思路⾮常简单:<p>创建window,设置窗⼝⼤⼩,创建label1,导⼊图⽚,创建label2,导⼊⽂字,show,结束!</p> import sysfrom PyQt5 import QtWidgets,QtGui#定义窗⼝函数windowdef window():#我事实上不太明⽩⼲嘛要这⼀句话,只是pyqt窗⼝的建⽴都必须调⽤QApplication⽅法app=QtWidgets.QApplication(sys.argv)#新建⼀个窗⼝,名字叫做ww=QtWidgets.QWidget()#定义w的⼤⼩w.setGeometry(100,100,300,200)#给w⼀个Titlew.setWindowTitle('lesson 2')#在窗⼝w中,新建⼀个lable,名字叫做l1l1=QtWidgets.QLabel(w)#调⽤QtGui.QPixmap⽅法,打开⼀个图⽚,存放在变量png中png=QtGui.QPixmap('/home/capture/Pictures/Selection_026.png')# 在l1⾥⾯,调⽤setPixmap命令,建⽴⼀个图像存放框,并将之前的图像png存放在这个框框⾥。

l1.setPixmap(png)#在窗⼝w中,新建另⼀个label,名字叫做l2l2=QtWidgets.QLabel(w)#⽤open⽅法打开⼀个⽂本⽂件,并且调⽤read命令,将其内容读⼊到file_text中file=open('/home/capture/eric6_test/auto_k2_all/test1.log')file_text=file.read()#调⽤setText命令,在l2中显⽰刚才的内容l2.setText(file_text)#调整l1和l2的位置l1.move(100,20)l2.move(140,120)#显⽰整个窗⼝w.show()#退出整个appapp.exit(app.exec_())#调⽤window这个函数window()不过,这样写的⽬的是什么,弄⼀个函数,来⽣成⼀个图像,没有参数可以输⼊?还不如不⽤函数呢。

qt程序实现多个图片连续显示效果像动画一样

qt程序实现多个图片连续显示效果像动画一样

qt程序实现多个图片连续显示效果像动画一样五张图片如下:程序主要代码如下:#include"shapewidget.h"#include<QMouseEvent>#include<QPainter>#include<QPixmap>#include<QBitmap>ShapeWidget::ShapeWidget(QWidget*parent) : QWidget(parent)//构造函数的时候显示第一幅图片,并打开定时器{pix=new QPixmap();pix->load(":/images/p1.png",0,Qt::AvoidDither|Qt::Threshol dDither|Qt::ThresholdAlphaDither);resize(pix->size());setMask(QBitmap(pix->mask()));count=1;timer=new QTimer(this);timer->start(500);connect(timer,SIGNAL(timeout()),this,SLOT(changePicture())) ;//定时器溢出关联changePicture()函数}ShapeWidget::~ShapeWidget(){}void ShapeWidget::changePicture()//使用switch语句根据情况选择不同的图片{QString picName;count=count+1;if(count>5)count=1;switch(count){case1:picName=":/images/p1.png";break;case2:picName=":/images/p2.png";break;case3:picName=":/images/p3.png";break;case4:picName=":/images/p4.png";break;case5:picName=":/images/p5.png";break;default:break;}pix->load(picName,0,Qt::AvoidDither|Qt::ThresholdDither|Q t::ThresholdAlphaDither);resize(pix->size());setMask(QBitmap(pix->mask()));//setMask()函数,图片之外透明部分都不显示update(); //这句话还是挺重要的,不加和加有很大的区别}void ShapeWidget::mousePressEvent(QMouseEvent*event) {if(event->button()==Qt::LeftButton){dragPosition=event->globalPos()-frameGeometry().topLeft();event->accept();}if(event->button()==Qt::RightButton){close();}}void ShapeWidget::mouseMoveEvent(QMouseEvent*event) {if(event->buttons()&Qt::LeftButton){move(event->globalPos()-dragPosition);event->accept();}}void ShapeWidget::paintEvent(QPaintEvent*event){QPainter painter(this);painter.drawPixmap(0,0,*pix);}遇到的问题:1、图片背景改为透明:从网上下载的图片背景是白色的,于是用setMask()函数也没用,结果还是会将白色的背景显示出来,于是我用了可牛软件抠图的方法将图片中的对象截取出来了,保存一下为png结尾的文件,呵呵,小鸡的背景终于是透明的了,这下在程序里面可以用setMask()函数了,除了小鸡显示之外,其他窗体、背景什么都不会显示。

Qt中显示图像数据

Qt中显示图像数据

Qt中显示图像数据一般图像数据都是以RGBRGBRGB……字节流的方式(解码完成后的原始图像流),我说成字节流,那就表明R,G,B的值各占一个字节,在编程时表示的就是unsigned char * data。

我们先来看一下QT中的QImage对象。

在加载data数据前,我们要确定QImage加载图像的空间分配足够大,先假设data是由640*480像素的压缩数据解码得来的,RGB(3字节)是一个像素,故data的应该是640*480*3个字节;比较一下下面两种方式:QImage img(640,480,QImage::Format_RGB888);//24位unsigned char * p_bits=img.bits();24位(3字节)一个像素,那么p_bits所得到的空间应该是640*480*3个字节,所以刚刚好一个字节对一个字节。

所以我们这样赋值即可:for(int i=0;i<640*480*3;i+=3){puiBits[i]=data[i];puiBits[i+1]=data[i+1];puiBits[i+2]=data[i+2];}//接着就是将img转化成QPixmap填充到QWidgetQPixmap pixmap=QPixmap::fromImage(img);pixmap=pixmap.scaled(widget->size());widget->setAutoFillBackground(true);QPalette palette;palette.setBrush(widget->backgroundRole(), QBrush(pixmap));widget->setPalette(palette);widget->repaint();另一种方式:unsigned int * p_bits;QImage img(640,480,QImage::Format_RGB32);p_bits=(uint*)img.bits();32位(4字节)一个像素,那么p_bits所得到的空间应该是640*480*4个字节,所以不能以上面的方式赋值。

python中qpixmap的用法

python中qpixmap的用法

python中qpixmap的用法在Python中使用QPixmap类可以处理图片。

QPixmap是Qt中的一个用于处理图像的类,它可以加载图片、裁剪图片、缩放图片、旋转图片等操作。

以下是QPixmap的一些常见用法:1.加载图片:```pythonimage = QPixmap("image.jpg") #加载名为image.jpg的图片```2.显示图片:```pythonlabel = QLabel()label.setPixmap(image)label.show() #在窗口中显示图片3.调整图片尺寸:```pythonresized_image = image.scaled(200, 200) #将图片的尺寸调整为200x200像素```4.裁剪图片:```pythoncropped_image = image.copy(QRect(100, 100, 200, 200)) #裁剪出图片的一个矩形区域```5.旋转图片:```pythonrotated_image = image.transformed(QTransform().rotate(90)) #顺时针旋转图片90度此外,QPixmap还可以用于创建绘图设备,以便进行绘图操作。

例如:```pythonpixmap = QPixmap(200, 200) #创建一个200x200像素的绘图设备pixmap.fill(Qt.white) #使用白色填充绘图设备painter = QPainter(pixmap)painter.drawEllipse(50, 50, 100, 100) #在绘图设备上绘制一个椭圆painter.end()```总之,QPixmap是一个强大的图像处理类,用户可以使用它加载、显示、处理和绘制图片。

适当拓展的话,还可以将QPixmap与其他Qt的图形类(如QPainter、QImage)结合使用,实现更复杂的图像处理和绘图操作。

文件数据通过qt将二维数组中的像素点显示成一张图片

文件数据通过qt将二维数组中的像素点显示成一张图片

⽂件数据通过qt 将⼆维数组中的像素点显⽰成⼀张图⽚⾸先声明,我是⼀个菜鸟。

⼀下⽂章中出现技术误导情况盖不负责从⽂件42.train 读⼊⼀个长度为dstSize*dstSize 字节数据,存到⼀个数组psData 中,这些数据全部是像素点的值,不包括⽂件优等帮助信息.通过qt 创建⼀个gui ⼯程,基类选择QWidegt,将图⽚显⽰出来。

代码如下#include "widget.h"#include "ui_widget.h"#include <QPainter>#include <cstdio>typedef unsigned short WORD;typedef unsigned char BYTE;typedef unsigned int DWORD;const int dstSize = 128;Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);}Widget::~Widget(){delete ui;}void Widget::paintEvent(QPaintEvent *e){QPainter paint(this);FILE *pf = NULL;const char * name = "42.train";DWORD wsize = dstSize * dstSize;BYTE * psData = (BYTE*)malloc(wsize);if( (pf = fopen(name, "rb" )) == NULL ){printf( "File coulkd not be opened " );return ;}DWORD *pSrc = (DWORD*)malloc(wsize*sizeof(DWORD));int n = fread(psData, wsize, 1, pf);if( n== 1){for (unsigned int i = 0; i < wsize; ++i){BYTE *pb=(BYTE *)(pSrc+i);pSrc[i] = 0;pb[0] = psData[i];pb[1] = psData[i];pb[2] = psData[i];}free(psData);}QByteArray imageByteArray = QByteArray( (const char*)pSrc, wsize*4 );uchar* transData = (unsigned char*)imageByteArray.data();QImage image = QImage(transData, dstSize, dstSize, QImage::Format_RGB32);free(pSrc);fclose(pf);paint.drawImage(QPoint(0, 0), image);paint.end();}⽂章结束给⼤家分享下程序员的⼀些笑话语录: 开发时间 项⽬经理: 如果我再给你⼀个⼈,那可以什么时候可以完⼯?程序员: 3个⽉吧!项⽬经理: 那给两个呢?程序员: 1个⽉吧!项⽬经理: 那100呢?程序员: 1年吧!项⽬经理: 那10000呢?程序员: 那我将永远⽆法完成任务.--------------------------------- 原创⽂章 By ⽂件和数据---------------------------------。

QT 显示一张图片

QT 显示一张图片

医学图像处理实验一:显示一张图片摘要实验目的本次实验的主要内容是熟悉图像处理的软件搭建环境,并且利用其显示一张图片。

在老师和助教的引导下,我们:了解了进行数字图像处理需要的软件以及软件平台的搭建开源计算机视觉库OpenCV以及其优势,应用领域了解实验需要用到的Qt和Qt Creator的原因,以及优势实验要求利用Qt Creator、Qt以及OpenCV编写程序显示一张图片。

图片自选。

一、技术讨论1.1实验原理本次实验的原理主要是利用了QT图片显示功能,通过编写程序实现对QT显示图片的指令从而显示出程序中指定的一张图片。

1.2实验方法本次实验主要是运用了Qt Creator的建立Qt4控制台应用,之后在.pro文件中添加CMake编译的OpenCV库文件。

通过编写程序实现对计算机磁盘中的某一图片的显示功能。

二、结果与讨论通过编写、修改并运行QT程序,实现图片显示,对计算机截屏如下:本实验中我主要使用了第二种图片显示程序,图片放在D盘中,命名为2,格式为jpg。

在QT平台上写入附录中的程序后,最终显示出上述图片。

其中中间出现的问题(附录程序中标注为黄色部分)和解决方法如下:1、在.pro文件中编写程序之前,其中已经包括一下部分:QT+=coreQT-=guiTARGET=showimageCONFIG+=consoleCONFIG-=app_bundleTEMPLATE=appSOURCES+=main.cpp重复输入以上程序内容运行出错。

因为重复输入以上程序使软件在以上程序中停滞,识别不到下面的程序内容,系统提示错误。

2、main.cpp中编写程序添加头文件时:int main()中的int字母“i”不可使用大写,否则无法正常运行,因为软件系统没有对“Int”进行定义。

3、下面一句程序编辑了要显示的图片的名字,更改括号里的内容,可以显示不同的图片IplImage*image=cvLoadImage("d:/2.jpg");4、在编写程序的时候一定要严格将程序和计算机磁盘里的内容想对应,如程序中c:\Qt\opencv2.2\include\opencv2\,应和QT软件安装位置相符,否则程序运行程序使提示无法找到文件等错误。

Qt控件背景图片设置总结

Qt控件背景图片设置总结

Qt控件背景图⽚设置总结⾃⼰开发了⼀个股票智能分析软件,功能很强⼤,需要的点击下⾯的链接获取:扫码关注公众号1.Qss 的setStyleSheet设置背景图⽚1.1background-image设置平铺或者居中 这种⽅法设置的要点是要将图⽚添加到qrc⽂件中,形成资源路径,然后在QT界⾯编辑或者程序代码中通过设置路径来实现背景图⽚设置。

图⽚⼤⼩不能⾃适应控件⼤⼩。

只能可以实现平铺或者居中显⽰。

background-position:center;设置显⽰位置,background-repeat:no-repeat;设置是否平铺;(1)平铺重复显⽰QWidget#widgetWinPic{ background-image:url(:/FaceMatch/Resources/pic/viewbackin.png); background-repeat:repeat;}或者代码中ui.widgetWinPic.setStyleSheet("QPushButton{ background-image:url(:/FaceMatch/Resources/pic/viewbackin.png);background-repeat:repeat;");(2)居中不重复设置QWidget#widgetWinPic{ background-image:url(:/FaceMatch/Resources/pic/viewbackin.png); background-position:center; background-repeat:no-repeat;}或者代码中 ui.widgetWinPic.setStyleSheet("QPushButton{ background-image:url(:/FaceMatch/Resources/pic/viewbackin.png);background-position:center;background-repeat:no-repeat;");1.2 border-image设置按照控件⼤⼩缩放填充整个控件图⽚被拉伸填满整个控件,可以实现缩放拉伸填充。

PyQt5实现多张图片显示并滚动

PyQt5实现多张图片显示并滚动

PyQt5实现多张图⽚显⽰并滚动最近要做个⽹页图⽚批量下载⼯具,然后需要⼀个页⾯显⽰⽹页上的所有图⽚供⽤户勾选,再根据勾选的内容来下载指定图⽚,其中就涉及到要到同时显⽰多张图⽚。

单页⾯显⽰多张图⽚习惯性的⽤GridLayout但是发现怎么长时间解决都⽆法实现滚动,这样就会强制压缩图⽚⼤⼩,导致图⽚较多时显⽰的图⽚太⼩,不是我想要的,后⾯⽹上借鉴了⼀下⽤了ScrollArea实现了代码如下:import sysimport requestsfrom PyQt5.QtWidgets import (QWidget, QLabel,QVBoxLayout,QCheckBox,QGridLayout, QScrollArea,QApplication)from PyQt5.QtGui import QPixmapfrom PyQt5.QtCore import Qt,QSizeclass Picture(QWidget):def __init__(self, parent=None, url=None):super().__init__(parent)self.url = urlself.ui()def ui(self):self.setFixedSize(850,600)layout = QGridLayout()total = len(self.url)self.setLayout(layout)self.sc = QScrollArea(self)self.qw = QWidget()if total % 5 == 0:rows = int(total/5)else:rows = int(total/5) + 1self.qw.setMinimumSize(850,230*rows)for i in range(total):pre_url = self.url[i].split("?")[0]sup = pre_url.split(".")[-1]req = requests.get(self.url[i])photo = QPixmap()photo.loadFromData(req.content)width = photo.width()height = photo.height()if width==0 or height==0:continuetmp_image = photo.toImage()size = QSize(width,height)photo.convertFromImage(tmp_image.scaled(size, Qt.IgnoreAspectRatio))tmp = QWidget(self.qw)vl = QVBoxLayout()label= QLabel()label.setFixedSize(150,200)label.setStyleSheet("border:1px solid gray")label.setPixmap(photo)label.setScaledContents(True)ck = QCheckBox(str(i)+"."+sup+"("+str(width)+"x"+str(height)+")", self)vl.addWidget(label)vl.addWidget(ck)tmp.setLayout(vl)tmp.move(160 * (i % 5), 230 * int(i / 5))self.sc.setWidget(self.qw)if __name__ == '__main__':app = QApplication(sys.argv)url=['https:///aadd7b895_xs.jpg?source=1940ef5c', 'https:///50/v2-60f7b5c071d378a34a3a6c489c3fdacc_hd.jpg?source=1940ef5c', 'https:///80/v2-60f7b5c071d378a34a3a6c489c3fdacc_720w.jpg?source=1940ef5 pic = Picture(url=url)pic.show()sys.exit(app.exec_())效果如下:其中要计算好QWdiget的⾼度才能滚动,不然会发现可滚动的不⾜导致部分看不到或者滚动太多导致部分空⽩,都不好看。

Qt应用程序图片显示方法

Qt应用程序图片显示方法

Qt应用程序图片显示方法在开发应用程序的时候,经常需要显示图片(大部分情况下我们只需要显示,而不需要对图片做任何修改),Qt没有提供专门显示图片的控件,在此介绍一种显示图片的方法,以及使用时的注意事项。

以下代码显示保存在E盘根目录名为”1.png”的图片(请自行包含相应头文件):int main(int argc, char* argv[]){QApplication app(argc , argv);QLabel *label;QPixmap *pixmap;QString picName;picName = "E:/1.jpg";pixmap = new QPixmap(picName);label=new QLabel;label->setPixmap(*pixmap) ;label->show ();return app.exec() ;}正常情况下,最终的程序会加载1.jpg图片并将它显示在label上(本示例中为占满窗口),但是,当需要使用相对路径加载图片的时候,或许初次尝试的过程不会像这次这么顺利:比如说,如果我们想加载的图片位于名为”pic”的文件夹中,并且pic文件夹与这个cpp文件在同一目录,是不是仅仅用”/pic/1.jpg”就可以满足要求呢?在我实际操作的时候发现并不是这样的,加载出的图片为空,唯一的可能是图片路径的错误:在QDir类的帮助下,我输出了currentPath当前路径,结果发现,对于程序而言当前的路径是和debug、release等文件夹的父路径,将pic文件夹复制到这个路径,则对于图片来说,路径应该是currentPath+”/pic/图片名”,具体实现代码如下:int main(int argc, char* argv[]){QApplication app(argc , argv);QLabel *label;QDir qDir;QPixmap *pixmap;QString pathName;QString picName;pathName = qDir.currentPath();picName = pathName + "/pic/1.jpg";pixmap = new QPixmap(picName);label=new QLabel;label->setPixmap(*pixmap) ;label->show ();return app.exec() ;}总算找到一种可以解决问题的方法,实践证明,多多调试才是王道……。

PyQt5显示GIF图片的方法

PyQt5显示GIF图片的方法

PyQt5显⽰GIF图⽚的⽅法使⽤QMoive⽅法实现导⼊库⽂件from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import QMovie创建⼀个带label控件的窗⼝,label作为GIF的显⽰窗体class Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(517, 361)bel = QtWidgets.QLabel(Form)bel.setGeometry(QtCore.QRect(0, 0, 500, 300))bel.setObjectName("label")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))在setupUi()函数⾥⾯加⼊self.gif = QMovie('qq.gif')bel.setMovie(self.gif)self.gif.start()第⼀⾏实例化⼀个QMovie对象,传⼊GIF图⽚地址第⼆⾏使⽤label的setMovie⽅法导⼊QMovie对象第三⾏开始播放GIF动画效果图:PyQt的⼀些其他功能#设置窗体⽆边框self.setWindowFlags(Qt.FramelessWindowHint)# 设置背景透明# self.setAttribute(Qt.WA_TranslucentBackground)# 显⽰输⼊对话框# 字符串类型,标题、提⽰信息、默认输⼊# text,ok=QInputDialog.getText(self, "title", "User name:", QLineEdit.Normal, '>>>:')# 整型类型标题、提⽰信息、默认值,(最⼩值,最⼤值)可选# num,ok = QInputDialog.getInt(self,"输⼊整数",'输⼊0-100范围内的数字',30,0,100)# 下拉框# my_list = ['1','2','3']# my_str,ok = QInputDialog.getItem(self,"下拉框",'提⽰',my_list)以上这篇PyQt5显⽰GIF图⽚的⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

qt 如何显示一个图片并使其随窗体同步缩放

qt 如何显示一个图片并使其随窗体同步缩放

qt 如何显示一个图片并使其随窗体同步缩放答:下面给出一个从QWidget派生的类ImageWidget,来设置其背景为一个图片,并可随着窗体改变而改变,其实从下面的代码中可以引申出其它许多方法,如果需要的话,可以从这个类再派生出其它类来使用。

头文件: ImageWidget.hppQuote:#ifndef IMAGEWIDGET_HPP#define IMAGEWIDGET_HPP#include <QtCore>#include <QtGui>class ImageWidget : public QWidget{Q_OBJECTpublic:ImageWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);virtual ~ImageWidget();protected:void resizeEvent(QResizeEvent *event);private:QImage _image;};#endifCPP文件: ImageWidget.cppQuote:#include "ImageWidget.hpp"ImageWidget::ImageWidget(QWidget *parent, Qt::WindowFlags f): QWidget(parent, f){_image.load("image/image_background");setAutoFillBackground(true); // 这个属性一定要设置QPalette pal(palette());pal.setBrush(QPalette::Window,QBrush(_image.scaled(size(), Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));setPalette(pal);}ImageWidget::~ImageWidget(){}// 随着窗体变化而设置背景void ImageWidget::resizeEvent(QResizeEvent *event){QWidget::resizeEvent(event);QPalette pal(palette());pal.setBrush(QPalette::Window,QBrush(_image.scaled(event->size(), Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));setPalette(pal);}。

QT中添加图片资源

QT中添加图片资源

QT中添加图⽚资源
1、在ui设计界⾯中添加label,⽤于显⽰图⽚
2、添加QT资源⽂件
往项⽬中添加新⽂件,选择QT分类中的资源⽂件,名称为"myImage",其他选项默认。

3、添加资源
在项⽬⽬录下新建⽂件夹"image",⽤于存放将要使⽤的图⽚⽂件。

在Qt Creator中,在资源管理器界⾯单击"添加"按钮,选择"添加前缀",然后将属性栏中的前缀改为"/myImage",再单击"添加"按钮,"添加⽂件",在弹出的对话框中选择image中的图⽚⽂件。

添加完成后myImage.qrc⽬录下会有已经添加完成的图⽚⽂件。

4、使⽤图⽚
在使⽤label显⽰的地⽅,添加相应的代码。

// logo图⽚的加载
QImage image(QString(":/image/sf.png"));
ui->label_logo->setPixmap(QPixmap::fromImage(image));。

嵌入式Linux系统的图片解码和显示方法详解

嵌入式Linux系统的图片解码和显示方法详解

嵌入式Linux系统的图片解码和显示方法详解图片在现代社会中具有广泛的应用,在嵌入式领域也不例外。

嵌入式Linux系统作为一种轻量级且灵活的操作系统,为图片的解码和显示提供了良好的支持。

本文将详细介绍嵌入式Linux系统中图片解码和显示的方法,并探讨相应的实现原理。

一、图片解码方法嵌入式Linux系统中的图片解码可以通过多种方式实现。

1.1 V4L2库解码方法V4L2(Video4Linux2)是Linux内核提供的架构,用于提供视频设备的访问接口。

它同样能够用于图片解码。

在嵌入式Linux系统中,通过使用V4L2库可以方便地进行图片解码。

V4L2库提供了一系列的API函数,可以实现图片的解码和数据的获取。

1.2 FFmpeg库解码方法FFmpeg是一套开源的多媒体处理工具。

在嵌入式Linux系统中,通过使用FFmpeg库可以进行图片解码。

FFmpeg库提供了丰富的功能和接口,可以解码多种图片格式,并将解码后的数据用于显示或其他用途。

1.3 OpenCV库解码方法OpenCV是一套开源的计算机视觉库,可以用于图片和视频的处理。

在嵌入式Linux系统中,通过使用OpenCV库可以实现图片的解码。

OpenCV库提供了诸多图像处理和分析的函数,可以进行图片解码和数据处理等操作。

二、图片显示方法嵌入式Linux系统中的图片显示可以通过多种方式实现。

2.1 Framebuffer显示方法Framebuffer是Linux内核提供的一种图形显示模式,通过FrameBuffer可以直接显示解码后的图片数据。

在嵌入式Linux系统中,通过FrameBuffer可以实现图片的快速显示。

通过操作FrameBuffer可以控制像素点的颜色和位置等显示效果。

2.2 DirectFB显示方法DirectFB是一套用于嵌入式Linux系统的图形加速库,通过DirectFB可以实现高性能的图片显示。

DirectFB库提供了一系列的API函数,可以实现图片解码数据的传输和显示。

Qt:添加点击事件的Label并显示图片

Qt:添加点击事件的Label并显示图片

Qt:添加点击事件的Label并显⽰图⽚1.给label添加点击事件 Qt中原本的label是没有点击事件的,如果想添加点击事件的话,可以继承QLabel类并重载⿏标事件(⽐如mousePressedEvent),然后在⿏标事件中发送⼀个信号,具体如下:// clicklabel.h#ifndef CLICKEDLABEL_H#define CLICKEDLABEL_H#include <QWidget>#include <QLabel>class ClickedLabel : public QLabel{Q_OBJECTpublic:ClickedLabel(QWidget *parent=0): QLabel(parent){}~ClickedLabel() {}signals:void clicked(ClickedLabel* click); // 点击信号protected:void mouseReleaseEvent(QMouseEvent*); // 重载了⿏标释放事件};#endif// CLICKEDLABEL_H// clicklabel.c#include "clickedlabel.h"void ClickedLabel::mouseReleaseEvent(QMouseEvent *){emit clicked(this); // 在点击事件中发送信号}2.显⽰图⽚ 使⽤QPixmap可以在label中显⽰图⽚,具体如下:QString path = "logo.png"; // 定义图⽚的路径QPixmap img(path); // 实例化⼀个imgui->label_img->setPixmap(img); // 在label中添加imgui->label_img->resize(img.width(),img.height()); // 使⽤图⽚尺⼨设置label⼤⼩3.完整例程 新建⼀个空⽩的窗体,然后在代码中添加:// 在mainwindow.h中添加(包含头⽂件 clicklabel.h)private slots: void on_label_clicked();private: ClickLabel * clickLabel;// 在mainwindow.cpp中的构造函数中添加clickLabel = new ClickLabel(this);QString path="logo.png";QPixmap img(path);clickLabel->setPixmap(img);clickLabel->resize(img.width(),img.height());connect(clickLabel,SIGNAL(clicked(ClickLabel*)),this,SLOT(on_label_clicked()));。

Qt时间,图片显示和事件处理

Qt时间,图片显示和事件处理

一.Qt中的时间QDate --------- 年月日QTime --------- 时分秒QDateTime ----- 年月日时分秒1.获取系统当前时间static QTime QTime::currentTime();2.转成字符串QString toString(QString &format)const;format:转换的格式10:43:13 format="hh:mm:ss"======>"10:43:13"二.Qt中的定时器1.Qobxxxxject类中自带定时器(1)启动定时器int Qobxxxxject::startTimer(int initvaltimetype)initval:表示定时器时间长度单位是mstimetype:表示计数精度采用默认返回定时器id(2)关闭定时器void Qobxxxxject::killTimer(int id)(3)定时处理函数当定时时间到自动调用该函数void Qobxxxxject::timerEvent(QTimerEvent *event)Qt中需要设置定时器定时时间到以后要执行操作,可以在在对应的类中重写定时处理函数2.QTimer定时器(1)构造QTimer对象(2)启动定时器void start(int msec);//设置+启动msec:定时时间毫秒int interval()const;//启动定时器int setInterval(int msec);//设置定时时间(3)暂停定时器void stop();(4)定时任务信号signal:void timeout();当定时器时间到了自动发送timeout的超时信号,将超时信号连接到自己的槽函数,在槽函数中执行超时处理代码三.Qt中的图片显示1.与图片处理相关的对象QPictureQImageQPixmap以上的类都可以用来管理图片,以QPixmap使用时只需要传递图片的路径给QPixmap对象就可以了2.显示图片使用QLabel直接显示图片也可以通过QPainter来绘制图形图片四.Qt的事件处理事件处理属于Qt的基本通信机制,信号和槽也属于事件处理机制,目的是处理各项需要处理的事物1.Qt事件发生既可以通过窗口系统某个动作产生,也可以直接通过代码产生(很少使用)2.事件的定义QEvent类定义Qt中的事件,常见的需要处理的窗口系统事件都有对应的类:QKeyEvent(按键事件)QMouseEvent(鼠标事件)QPaintEvent(图像处理事件)QResizeEvent(窗口大小改变事件)QMoveEvent(窗口移动事件)QTimerEvent(系统内部定时器事件)3.事件的处理以点击鼠标事件为例(1)重写特定事件的事件处理器 ---------- 子类继承void QMoveEvent::QMoveEvent(const QPoint &posconst QPoint &oldpos)[MISSING IMAGE: , ](2)重写Qobxxxxject类中所有事件的事件处理虚函数bool Qobxxxxject::event(QEvent *event);[MISSING IMAGE: , ](3)程序中QCoreApplication类中捕获事件总接口(notify) -------- 子类继承(在QApplocation 的子类中重写notify)bool QCoreApplication::notify(Qobxxxxject *receiverQEvent *event);//给哪个对象发送什么事件[MISSING IMAGE: , ](4)事件过滤器事件过滤器的作用对某些特殊事件进行过滤(特殊处理),处理完后可以选择继续交给下一层,也可以就此处理结束事件过滤器处于notify和event之间用法:安装过滤器 ------- void Qobxxxxject::installEventFilter(Qobxxxxject *filter/*观察者类*/);[MISSING IMAGE: , ]重写过滤器处理函数 --------- bool Qobxxxxject::eventFilter(Qobxxxxject *watched/*观察者*/QEvent *event);[MISSING IMAGE: , ](5)Qt中事件的处理顺序注意:事件处理的四个流程并不是每次使用都要对其进行重写,而是选择合适的位置来处理对应的事件。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load("images/linux.jpg");
painter.drawPixmap(0,0,100,100,pix);
三、实现图片的缩放。
我们可以使用QPixmap类中的scaled()函数来实现图片的放大和 缩小。
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load("images/linux.jpg");
painter.drawPixmap(0,0,100,100,pix);
}
这里必须先改变旋转中心,然后再旋 转,然后再将原点复原,才能达到想要的效果。
五、实现图片的扭曲。
实现图片的扭曲,是使用的QPainter类的shear(qreal sh,qreal sv)函数完成的。它有两个参数,前面的参数实现横行变形,后面的参数实现纵向变形。当它们的值为0时,表示不扭曲。
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load("images/linux.jpg");
painter.drawPixmap(0,0,100,100,pix);
在QT中显示图片
2011-05-18 08:32
这片文章主要是来自:/share/detail/24642020#content
现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲。这 里我们是利用QPixmap类来实现图片显示的。
}
这里新建QPixmap类对象,并为其添加图片,然后在以(0,0)点开始 的宽和高都为100的矩形中显示该图片。你可以改变矩形的大小,看一下效果啊。最终程序运行效果如下。
二、利用更改坐标原点实现平移。
Qpainter类中的translate()函数实现坐标原 点的改变,改变原点后,此点将会成为新的原点(0,0);
painter.shear(0.5,0);//横向扭曲
painter.drawPixmap(100,0,100,100,pix);
}
painter.translate(100,100);//将(100,100)设为坐 标原点
painter.drawPixmap(0,0,100,100,pix);
}
这里将(100,100)设置为了新的坐标原点,所以下面在 (0,0)点贴图,就相当于在以前的(100,100)点贴图。
四、实现图片的旋 转。
旋转使用的是QPainter类的 rotate()函数,它默认是以原点为中心进行旋转的。我们要改变旋转的中心,可以使用前面讲到的translate()函数完成。
例如:
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
//将图片的宽和高都扩大两倍,并且在给定的矩形内保持宽高的比值
painter.drawPixmap(100,100,pix);
}
其中参数Qt::KeepAspectRatio,是图片缩放的方式。我们 可以查看其帮助。将鼠标指针放到该代码上,当出现F1提示时,按下F1键,这时就可以查看其帮助了。当然我们也可以直接在帮助里查找该代码。这是个枚举变量,这里有三个值,只看其图片就可大致明 白,Qt::IgnoreAspectRatio是不保持图片的长宽比,Qt::KeepAspectRatio是在给定的矩形中保持长宽比,最后一个也 是保持长宽比,但可能超出给定的矩形。这里给定的矩形是由我们显示图片时给定的参数决定的,例如 painter.drawPixmap(0,0,100,100,pix);就是在以(0,0)点为起始点的宽和高都是100的矩形中。
一、利用QPixmap显示图片。
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load("images/linux.jpg");
painter.drawPixmap(0,0,100,100,pix);
QPixmap pix;
pix.load("images/linux.jpg");
painter.translate(50,50);//让图片的中心作为旋转的中心
painter.rotate(90); //顺时针旋转90度
painter.translate(-50,-50);//使原点复
painter.drawPixmap(0,0,100,100,pix);
qreal width = pix.width();//获得以前图片的宽和高
qreal height = pix.height();
pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);
相关文档
最新文档