qt图像预览

合集下载

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软件安装位置相符,否则程序运行程序使提示无法找到文件等错误。

图片预览功能

图片预览功能

图片预览功能图片预览功能是指在一个网页或应用程序中,用户可以点击或悬停在一个图片上,以便查看或放大该图片的功能。

这种功能可大大提升用户体验,因为它允许用户更加便捷地查看图片的细节,并能够更容易地决定是否要点击查看该图片的全尺寸版本。

图片预览功能的实现通常有两种方式:点击预览和悬停预览。

点击预览是指用户需要点击图片才能查看其预览版本,而悬停预览是指用户只需将鼠标指针悬停在图片上方即可查看其预览版本。

点击预览功能通常通过以下步骤实现:1. 首先,需要在网页或应用程序中添加一个点击事件监听器,以便捕获用户点击图片的操作。

2. 当用户点击图片时,监听器会触发一个预览函数,该函数会展示一个包含预览图片的模态框(modal)。

3. 预览函数会动态创建一个包含预览图片的HTML元素,并将其添加到模态框中。

通常,预览图片的尺寸会比原始图片小,以便更好地适应模态框的尺寸。

4. 模态框还可以包含一些控制按钮,如关闭按钮、放大按钮和缩小按钮,以便用户可以与预览图片进行交互。

5. 当用户点击关闭按钮或模态框外部时,预览函数会关闭模态框,结束预览。

悬停预览功能通常通过以下步骤实现:1. 首先,需要在网页或应用程序中添加一个悬停事件监听器,以便捕获用户将鼠标悬停在图片上方的操作。

2. 当用户悬停在图片上方一段时间后,监听器会触发一个预览函数,该函数会展示一个包含预览图片的工具提示框(tooltip)。

3. 预览函数会动态创建一个包含预览图片的HTML元素,并将其添加到工具提示框中。

通常,预览图片的尺寸会比原始图片小,以便更好地适应工具提示框的尺寸。

4. 工具提示框还可以包含一些控制按钮,如关闭按钮、放大按钮和缩小按钮,以便用户可以与预览图片进行交互。

5. 当用户将鼠标移出图片或工具提示框时,预览函数会关闭工具提示框,结束预览。

无论是点击预览还是悬停预览,图片预览功能都可以提供一种便捷的方式让用户查看和放大图片。

通过使用合适的预览尺寸和控制按钮,可以大大提升用户体验,并使用户更轻松地浏览和决定是否要查看更多图片。

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图片显示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下默认是反斜杠.。

9-QT(显示图片)

9-QT(显示图片)

广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
2.将dialog.cpp文件中的 将 文件中的paintEvent 文件中的 ()函数更改如下 ()函数更改如下
void Dialog::paintEvent(QPaintEvent *) { QPainter painter(this); QPixmap pix; pix.load(“images/linux.png”);//注意目录,注意资源 文件的引用方式 painter.drawPixmap(0,0,100,100,pix); }
广东科学技术职业学院
基于ARM系统的设计与开发
Qt 2D绘图 图片的显示
1、 、
显示图片 图片平移,缩放, 图片平移,院
广东科学技术职业学院
基于ARM系统的设计与开发
主要的任务
1、图片的显示:实现在窗口上显示图片 实现在窗口上显示图片。 实现在窗口上显示图片 2、图片的变形:怎样将图片进行平移,缩放,旋转 怎样将图片进行平移, 怎样将图片进行平移 缩放, 和扭曲
广州学院
广东科学技术职业学院
基于ARM系统的设计与开发
一、图片的显示(利用 利用QPixmap ) 利用
1.新建一个工程,窗口为对话框 ,并在工程的目录 新建一个工程, 新建一个工程 下新建一个images目录,在该目录下放了一张 下新建一个 目录, 目录 linux.png 图片 (也可以加到一个资源文件中)
广东科学技术职业学院
基于ARM系统的设计与开发
五、实现图片的扭曲
实现图片的扭曲,是使用的QPainter类的shear(qreal sh, qreal sv)函数完成的。它有两个参数,前面的参数实现横行 变形,后面的参数实现纵向变形。当它们的值为0时,表示不 扭曲。 void Dialog::paintEvent(QPaintEvent *) { QPainter painter(this); QPixmap pix; pix.load(“images/linux.png”); painter.drawPixmap(0,0,100,100,pix); painter.shear(0.5,0); //横向扭曲 painter.drawPixmap(100,0,100,100,pix); } 广州学院

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个字节,所以不能以上面的方式赋值。

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的C++图片查看(浏览)器的设计与实现

基于QT的C++图片查看(浏览)器的设计与实现

图片查看器功能等简介项目实现功能:实现图片文件自动播放,暂停,放大,缩小,上一张,下一张,还原。

程序源码文件:widget.hwidget.cppmain.cpp注:在源码编辑之前,把“1-14.png”图片添加到Resources 里面。

源码如下:widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QTimer>#include <QPixmap>#include <QLabel>#include <QProcess>namespace Ui{class Widget;}class Widget : public QWidget{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();QTimer *timer;QPixmap pix;QLabel *label;QImage image1;QPalette palette;/*背景图片*/QProcess *process;private:Ui::Widget *ui;private slots:void on_return_2_clicked();void on_stop_clicked();void on_down_clicked();void on_up_clicked();void on_max_clicked();void on_min_clicked();void on_open_clicked();void on_exit_clicked();void on_start_clicked();void image();};#endif // WIDGET_H具体实现:widget.cpp#include "widget.h"#include "ui_widget.h"#include <QString>#include <QFileDialog>//对话框库#include <QStringList>QStringList::Iterator j;static int i=0,k=0,m=0;QString imge[1000]={};QStringimage2[]={":/1.png",":/2.png",":/3.png",":/4.png",":/5.png",":/6.png",":/7.png",":/8.png",":/9.png", ":/10.png",":/11.png",":/12.png",":/13.png",":/14.png",":/15.png"};Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);/*ui里一个scroollArea,scroollArea里一个label,label上显示图片*/label=new QLabel();ui->scrollArea->setWidget(label);ui->scrollArea->setAlignment(Qt::AlignCenter);timer= new QTimer;connect(timer,SIGNAL(timeout()),this,SLOT(image()));label->setAlignment(Qt::AlignCenter); //显示在中间// pix.load(image2[1]);// label->setPixmap(pix);/*背景图片*/image1.load(":/3.png"); //括号内为图片的相对目录QImage image2=image1.scaled(320,240);palette.setBrush(this->backgroundRole(),QBrush(image2));this->setPalette(palette);}Widget::~Widget(){delete ui;}/*自动播放*/void Widget::image(){pix.load(image2[i]);label->setPixmap(pix);i++;if(i>14) i=0;}void Widget::on_start_clicked()//开始自动播放{timer->start(2000);}void Widget::on_down_clicked()//下一张{timer->stop();i++;if(i>14) i=0 ;pix.load(image2[i]);label->setPixmap(pix);}void Widget::on_up_clicked()//上一张{timer->stop();i--;if(i<0) i=14;pix.load(image2[i]);label->setPixmap(pix);}void Widget::on_max_clicked()//放大{timer->stop();float x,y;if(m==0){pix.load(image2[i]);label->setPixmap(pix);m++;}else{x=pix.height();y=pix.width();pix= pix.scaled(x*1.5,y*1.5,Qt::KeepAspectRatio);label->setPixmap(pix);m++;}void Widget::on_min_clicked()//缩小{timer->stop();float x,y;if(m==0){pix.load(image2[i]);label->setPixmap(pix);m--;}else{x=pix.height();y=pix.width();pix= pix.scaled(x/1.5,y/1.5,Qt::KeepAspectRatio);label->setPixmap(pix);m--;}}void Widget::on_stop_clicked()//停止{timer->stop();}void Widget::on_return_2_clicked()//还原{timer->stop();pix.load(image2[i]);label->setPixmap(pix);}void Widget::on_open_clicked()//打开文件,选图片{timer->stop();QStringList list;list=QFileDialog::getOpenFileNames(this,"open image","/","*.png");for(j=list.begin();j<list.end();j++){imge[k]=*j;pix.load(imge[k]);label->setPixmap(pix);k++;}}void Widget::on_exit_clicked()//退出this->close();}主函数:#include <QApplication>#include "widget.h"#include <QFont>#include <QTextCodec>int main(int argc, char **argv){QApplication a(argc, argv);Widget w;QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));//解析文字QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));QFont font("wenquanyi", 25);w.show();return a.exec();}。

Qt显示图片的相关知识(属个人收集)

Qt显示图片的相关知识(属个人收集)

Qt显示图片的相关知识(属个人收集)首先看下QImage、QPixmap、QBitmap、QPicture 四个类QImage是设计并优化来为I/O操作的,可以直接访问和操作像素,而QPixmap是设计并优化来在屏幕上显示图片的。

QBitmap仅是继承自QPixmap的一个方便使用的类,是为了确保图片的深度为1.QPicture是绘图设备,可以用来重现QPainte。

1、一个简单的图片显示程序(以下仅是部分程序段,相信大家会看明白)QPixmap pixmap( "image.jpg" ); //image.jpg在程序的当前目录下。

PixmapLabel1->setPixmap(pixmap); //PixmapLabel1标签即可显示图片。

2、将QImage转换为QPixmapQString fileName = QFileDialog::getOpenFileName(this,tr("Open File"), QDir::currentPath());if (!fileName.isEmpty()){QImage image(fileName); //定义QImage类。

if (image.isNull()) {QMessageBox::information(this, tr("Image Viewer"),tr("Cannot load %1.").arg(fileName));return;}bel->setPixmap(QPixmap::fromImage(image)); 将QImage转换为QPixmap。

}3、QImage的加载图片的方法(个人现只懂两种)(1)、QImage image(fileName); //直接在QImage类的构造函数搞定,fileName是指应用程序的当前目录,相信大家能理解这里所说的当前目录。

Qt利用ImageWatch实现图片查看功能

Qt利用ImageWatch实现图片查看功能

Qt利⽤ImageWatch实现图⽚查看功能使⽤Qt实现ImageWatch图⽚查看功能,图⽚放⼤可见RGB像素值。

⽀持打开⼤图⽚,即打开⼀个⼏百MB甚⾄⼏GB的⼤图⽚。

1、什么是ImageWatchVisual Studio有专门针对OpenCV开发的插件,名叫ImageWatch,图⽚放⼤之后可以查看RGB的像素值。

2、得空⾃⼰⽤Qt仿照实现了⼀下这个功能:纯粹Qt写的,没有使⽤Halcon和OpenCV库。

(1)打开8位的灰度图⿏标滚轮放⼤之后,可以查看灰度值;⿏标中键下压可以拖动图⽚;(2)打开24位的彩⾊图⿏标放⼤之后可以查看RGB三通道的数值;⿏标中键下压可以拖动图⽚;3、怎么使⽤Qt打开⼀个⼏百MB甚⾄⼏GB的⼤图⽚?Qt官⽅⽂档建议使⽤QImageReader,直接上源码:bool MainWindow::readBigImage(const QString &path){QImageReader reader(path);reader.setAutoTransform(true);if (!reader.canRead()){return false;}QSize originSize = reader.size(); //原始的分辨率qDebug() << originSize;QSize newSize = originSize.scaled(800, 600, Qt::KeepAspectRatio); //缩放后的分辨率,保持纵横⽐qDebug() << newSize;QRect clipRt(500, 0, 1000, 1000);//读取的⽅式#if 1reader.setScaledSize(newSize); //按照指定的缩放⼤⼩来读取#elsereader.setClipRect(clipRt); //按照指定的矩形区域来读取#endifQImage image = reader.read();if (image.isNull()){QFile file(path);file.open(QIODevice::ReadOnly);QByteArray data = file.readAll();image = QImage::fromData(data).scaled(newSize, Qt::KeepAspectRatio);if (image.isNull()){return false;}}ui->graphicsView->addCADBackgroundImage(image);//⼀次性定时器QTimer::singleShot(10, this, [=]() {slotViewZoomAuto();});return true;}到此这篇关于Qt利⽤ImageWatch实现图⽚查看功能的⽂章就介绍到这了,更多相关Qt ImageWatch图⽚查看内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

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() ;}总算找到一种可以解决问题的方法,实践证明,多多调试才是王道……。

Python+PyQt5制作一个图片查看器

Python+PyQt5制作一个图片查看器

Python+PyQt5制作⼀个图⽚查看器⽬录前⾔实现⽅式测试前⾔在 PyQt 中可以使⽤很多⽅式实现照⽚查看器,最朴素的做法就是重写QWidget的paintEvent()、mouseMoveEvent等事件,但是如果要在图像上多添加⼀些形状,那么在对图像进⾏缩放旋转等仿射变换时需要对这些形状也这些变换,虽然不难,但是从头实现这些变换还有形状还是挺讨厌的。

好在 Qt 提供了图形视图框架,关于这个框架的基本使⽤可以参见,下⾯进⼊正题。

实现⽅式⼀个最基本的照⽚查看器应该具有以下功能:载⼊图像缩放图像在窗⼝尺⼨⼩于图像时允许拖拽图像载⼊图像可以使⽤QGraphicsPixmapItem来解决,缩放图像使⽤QGraphicsView的scale(sx, sy)解决,移动图像只需将QGraphicsView的dragMode设置为QGraphicsView.ScrollHandDrag即可。

因为常常使⽤⿏标滚轮来缩放图像,所以还需要重写重写以下QGraphicsView的wheelEvent。

实际上由于窗⼝的缩放导致视⼝⼤⼩变化,还有⼀些细枝末节需要处理。

具体代码如下:# coding:utf-8import sysfrom PyQt5.QtCore import QRect, QRectF, QSize, Qtfrom PyQt5.QtGui import QPainter, QPixmap, QWheelEventfrom PyQt5.QtWidgets import (QApplication, QGraphicsItem, QGraphicsPixmapItem,QGraphicsScene, QGraphicsView)class ImageViewer(QGraphicsView):""" 图⽚查看器 """def __init__(self, parent=None):super().__init__(parent=parent)self.zoomInTimes = 0self.maxZoomInTimes = 22# 创建场景self.graphicsScene = QGraphicsScene()# 图⽚self.pixmap = QPixmap(r'D:\hzz\图⽚\硝⼦\硝⼦ (2).jpg')self.pixmapItem = QGraphicsPixmapItem(self.pixmap)self.displayedImageSize = QSize(0, 0)# 初始化⼩部件self.__initWidget()def __initWidget(self):""" 初始化⼩部件 """self.resize(1200, 900)# 隐藏滚动条self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)# 以⿏标所在位置为锚点进⾏缩放self.setTransformationAnchor(self.AnchorUnderMouse)# 平滑缩放self.pixmapItem.setTransformationMode(Qt.SmoothTransformation)self.setRenderHints(QPainter.Antialiasing |QPainter.SmoothPixmapTransform)# 设置场景self.graphicsScene.addItem(self.pixmapItem)self.setScene(self.graphicsScene)def wheelEvent(self, e: QWheelEvent):""" 滚动⿏标滚轮缩放图⽚ """if e.angleDelta().y() > 0:self.zoomIn()else:self.zoomOut()def resizeEvent(self, e):""" 缩放图⽚ """super().resizeEvent(e)if self.zoomInTimes > 0:return# 调整图⽚⼤⼩ratio = self.__getScaleRatio()self.displayedImageSize = self.pixmap.size()*ratioif ratio < 1:self.fitInView(self.pixmapItem, Qt.KeepAspectRatio)else:self.resetTransform()def setImage(self, imagePath: str):""" 设置显⽰的图⽚ """self.resetTransform()# 刷新图⽚self.pixmap = QPixmap(imagePath)self.pixmapItem.setPixmap(self.pixmap)# 调整图⽚⼤⼩self.setSceneRect(QRectF(self.pixmap.rect()))ratio = self.__getScaleRatio()self.displayedImageSize = self.pixmap.size()*ratioif ratio < 1:self.fitInView(self.pixmapItem, Qt.KeepAspectRatio)def resetTransform(self):""" 重置变换 """super().resetTransform()self.zoomInTimes = 0self.__setDragEnabled(False)def __isEnableDrag(self):""" 根据图⽚的尺⼨决定是否启动拖拽功能 """v = self.verticalScrollBar().maximum() > 0h = self.horizontalScrollBar().maximum() > 0return v or hdef __setDragEnabled(self, isEnabled: bool):""" 设置拖拽是否启动 """self.setDragMode(self.ScrollHandDrag if isEnabled else self.NoDrag)def __getScaleRatio(self):""" 获取显⽰的图像和原始图像的缩放⽐例 """if self.pixmap.isNull():return 1pw = self.pixmap.width()ph = self.pixmap.height()rw = min(1, self.width()/pw)rh = min(1, self.height()/ph)return min(rw, rh)def fitInView(self, item: QGraphicsItem, mode=Qt.KeepAspectRatio): """ 缩放场景使其适应窗⼝⼤⼩ """super().fitInView(item, mode)self.displayedImageSize = self.__getScaleRatio()*self.pixmap.size()self.zoomInTimes = 0def zoomIn(self, viewAnchor=QGraphicsView.AnchorUnderMouse):""" 放⼤图像 """if self.zoomInTimes == self.maxZoomInTimes:returnself.setTransformationAnchor(viewAnchor)self.zoomInTimes += 1self.scale(1.1, 1.1)self.__setDragEnabled(self.__isEnableDrag())# 还原 anchorself.setTransformationAnchor(self.AnchorUnderMouse)def zoomOut(self, viewAnchor=QGraphicsView.AnchorUnderMouse):""" 缩⼩图像 """if self.zoomInTimes == 0 and not self.__isEnableDrag():returnself.setTransformationAnchor(viewAnchor)self.zoomInTimes -= 1# 原始图像的⼤⼩pw = self.pixmap.width()ph = self.pixmap.height()# 实际显⽰的图像宽度w = self.displayedImageSize.width()*1.1**self.zoomInTimesh = self.displayedImageSize.height()*1.1**self.zoomInTimesif pw > self.width() or ph > self.height():# 在窗⼝尺⼨⼩于原始图像时禁⽌继续缩⼩图像⽐窗⼝还⼩if w <= self.width() and h <= self.height():self.fitInView(self.pixmapItem)else:self.scale(1/1.1, 1/1.1)else:# 在窗⼝尺⼨⼤于图像时不允许缩⼩的⽐原始图像⼩if w <= pw:self.resetTransform()else:self.scale(1/1.1, 1/1.1)self.__setDragEnabled(self.__isEnableDrag())# 还原 anchorself.setTransformationAnchor(self.AnchorUnderMouse)if __name__ == '__main__':app = QApplication(sys.argv)w = ImageViewer()w.show()sys.exit(app.exec_())测试来看⼀下实际的使⽤效果:到此这篇关于Python+PyQt5制作⼀个图⽚查看器的⽂章就介绍到这了,更多相关PyQt5图⽚查看器内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

qt中qcamera类用法

qt中qcamera类用法

qt中qcamera类用法QCamera类是Qt中用于相机设备的封装类。

它提供了一系列方法和信号槽用于访问和控制相机设备。

使用QCamera类需要先创建一个QCamera对象,然后调用open(方法打开相机设备。

通过判断isCaptureModeSupported(方法来确定设备是否支持捕获模式。

可以使用supportedViewfinders(方法获取设备支持的预览界面列表,并使用setViewfinder(方法设置预览界面。

QCamera类提供了几种捕获模式,包括照片捕获模式和视频捕获模式。

可以使用supportedCaptureModes(方法获取设备支持的捕获模式列表,并使用setCaptureMode(方法设置捕获模式。

在照片捕获模式下,可以使用capture(方法进行拍照,并通过QCameraImageCapture或QMediaRecorder类对拍摄结果进行处理。

QCameraImageCapture类提供了拍摄图片的方法和信号槽,可以设置图片保存路径、格式、质量等参数。

QMediaRecorder类提供了录制和保存视频的方法和信号槽,可以设置视频的编码器、分辨率、帧率等参数。

在视频捕获模式下,可以使用start(方法开始录制视频,使用stop(方法停止录制。

可以使用stateChanged(信号槽监听视频录制状态的变化。

以下是一个示例代码,演示了如何使用QCamera类进行拍照和视频录制:```cpp#include <QCamera>#include <QCameraImageCapture>#include <QMediaRecorder>#include <QCameraInfo>#include <QCameraViewfinder>#include <QVBoxLayout>#include <QPushButton>int main(int argc, char *argv[])QApplication app(argc, argv);//创建窗口和布局QWidget window;QVBoxLayout layout(&window);QCameraViewfinder viewfinder;layout.addWidget(&viewfinder);QPushButton captureButton("Capture");layout.addWidget(&captureButton);//找到并选择相机设备QList<QCameraInfo> cameras = QCameraInfo::availableCameras(; QCamera camera(cameras[0]);//设置预览界面camera.setViewfinder(&viewfinder);//创建图片拍摄对象QCameraImageCapture imageCapture(&camera);camera.setCaptureMode(QCamera::CaptureStillImage);//连接拍摄信号槽QObject::connect(&captureButton, &QPushButton::clicked, [&] //设置图片保存路径imageCapture.setCaptureDestination(QCameraImageCapture::Capt ureToFile);imageCapture.setEncodingSettings(QImageEncoderSettings(, QVideoEncoderSettings(, "image.jpg");//拍照imageCapture.capture(;});//创建视频录制对象QMediaRecorder mediaRecorder(&camera);camera.setCaptureMode(QCamera::CaptureVideo);//连接录制信号槽QObject::connect(&captureButton, &QPushButton::clicked, [&]//设置视频保存路径mediaRecorder.setOutputLocation(QUrl::fromLocalFile("video.mp4"));//开始录制mediaRecorder.record(;});//显示窗口window.show(;return app.exec(;```这是一个简单的例子,通过点击Capture按钮可以进行照片拍摄和视频录制。

qgraphicview 用法

qgraphicview 用法

qgraphicview 用法QGraphicsView 是Qt 中提供的一个显示图形场景的视图类。

它提供了一个可缩放和可滚动的窗口,用于在其中显示QGraphicsScene 中的图形项。

在使用QGraphicsView 之前,我们需要先创建一个QGraphicsScene 对象,用于存储图形项。

可以通过QApplication::processEvents() 来及时更新视图,也可以手动调用update() 函数来更新视图。

在创建QGraphicsView 对象时,需要将QGraphicsScene 对象作为参数传递给构造函数。

如果在构造函数中未指定QGraphicsScene 对象,则可以稍后使用setScene() 函数设置。

使用QGraphicsView 可以方便地进行图形项的移动、缩放和平移操作。

可以通过setDragMode() 函数设置拖动模式,包括NoDrag、ScrollHandDrag 和RubberBandDrag。

可以通过setInteractive() 函数设置交互模式,包括NoInteraction、ScrollHandDrag、RubberBandDrag、NoRubberBandDrag。

当需要对图形项进行选择操作时,可以使用QGraphicsView 的setRubberBandSelectionMode() 函数设置选择模式,包括QGraphicsView::NoSelection、QGraphicsView::SingleSelection 和QGraphicsView::ExtendedSelection。

QGraphicsView 也支持使用QGraphicsView::ViewportAnchor 和QGraphicsView::AnchorViewCenter 设置视图锚点,以控制缩放和平移的基准点。

在使用QGraphicsView 进行图形显示时,可以通过设置视图的背景色、前景色、边框样式等来自定义视图的外观。

qt graphics view用法

qt graphics view用法

qt graphics view用法
Qt Graphics View是一个强大的图形处理框架,它提供了一个可视化的窗口,用于显示场景中的图元。

以下是Qt Graphics View的基本用法:
1. 创建一个场景(QGraphicsScene):场景是所有图元对象的容器。

你可以通过调用QGraphicsScene类来创建一个场景。

2. 创建图元对象:在场景中,你可以创建各种类型的图元对象,如直线、多边形、矩形、椭圆等。

这些图元对象都是QGraphicsItem的子类。

3. 将图元添加到场景中:使用场景的add()函数将创建的图元对象添加到场景中。

4. 创建视图(QGraphicsView):视图是用于显示场景的窗口。

你可以通过调用QGraphicsView类来创建一个视图。

5. 将场景设置到视图中:将创建的场景对象设置为视图的scene()函数,这样视图就会显示该场景中的内容。

6. 显示视图:最后,显示视图窗口。

你可以将视图作为一个窗口部件添加到主窗口中,或者将其嵌入到其他容器中。

以上是Qt Graphics View的基本用法,当然还有很多高级的功能,如坐标变换、碰撞检测、图元组等。

这些功能都可以通过QGraphicsScene和QGraphicsItem类提供的方法来实现。

QT-实现图片浏览器

QT-实现图片浏览器

QT-实现图⽚浏览器painter.cpp#include "painter.h"painter::painter():Paint(10 , 10 , 810 , 810),Alloffset(0 , 0),label(QString::fromLocal8Bit("100%") , this),BigButton(QString::fromLocal8Bit("放⼤") , this),LittleButton(QString::fromLocal8Bit("缩⼩") , this),LiftButton(QString::fromLocal8Bit("向左") , this),RightButton(QString::fromLocal8Bit("向右") , this),UpButton(QString::fromLocal8Bit("向上") , this),DownButton(QString::fromLocal8Bit("向下") , this),ResetButton(QString::fromLocal8Bit("还原") , this),OpenButton(QString::fromLocal8Bit("打开⽂件") , this){ratio = 1.0;action = painter::None;BigButton.setGeometry(822 , 10 ,60 ,25); // x y w hconnect(&BigButton , SIGNAL(clicked()) , this , SLOT(onBigClicked()));LittleButton.setGeometry(822 , 40 , 60 ,25);connect(&LittleButton , SIGNAL(clicked()) , this , SLOT(onLittleClicked()));LiftButton.setGeometry(822,70,60,25);connect(&LiftButton,SIGNAL(clicked()),this,SLOT(OnLiftClicked()));RightButton.setGeometry(822,100,60,25);connect(&RightButton,SIGNAL(clicked()),this,SLOT(OnRightClicked()));UpButton.setGeometry(822,130,60,25);connect(&UpButton,SIGNAL(clicked()),this,SLOT(onUpClicked()));DownButton.setGeometry(822,160,60,25);connect(&DownButton,SIGNAL(clicked()),this,SLOT(onDownClicked()));ResetButton.setGeometry(822,190,60,25);connect(&ResetButton,SIGNAL(clicked()),this,SLOT(onResetClicked()));OpenButton.setGeometry(822,220,60,25);connect(&OpenButton,SIGNAL(clicked()),this,SLOT(onOpenClicked()));label.move(840 , 260);resize(890 , 850);this->setWindowTitle(QString::fromLocal8Bit("图⽚浏览器"));}void painter::paintEvent(QPaintEvent *event){Q_UNUSED(event);QPainter painter(this);painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing | QPainter::TextAntialiasing); //渲染 //painter.drawRect(Paint.x() - 1 , Paint.y() - 1 , Paint.width() + 1 , Paint.height() + 1);painter.drawRect(Paint.x(), Paint.y(), Paint.width(), Paint.height());//画框if(image.isNull()){return;}int NowW = ratio * pixW;int NowH = ratio * pixH;if(action == painter::Shrink){ratio -= (0.05 * ratio);if(ratio < 0.018){ratio = 0.01;}/*显⽰⽐例*/QString str;str.sprintf("%.0f%",ratio*100);label.setText(str) ;qDebug()<<QString::fromLocal8Bit("缩⼩:")<<ratio;}else if(action == painter::Amplification){ratio += 0.05 * ratio;if(ratio>4.5){ratio = 5.000;}/*显⽰⽐例*/QString str;str.sprintf("%.0f%",ratio*100);label.setText(str);qDebug()<<QString::fromLocal8Bit("放⼤:")<<ratio;}if(action == painter::Amplification || action == painter::Shrink || action == painter::Reset){qDebug() << "111";NowW = ratio *pixW;NowH = ratio *pixH;crtPix= pix.scaled(NowW, NowH,Qt::KeepAspectRatio,Qt::SmoothTransformation); //重新装载 action=painter::None;}if(action==painter::Move) //移动{int offsetx=Alloffset.x()+offset.x();Alloffset.setX(offsetx);int offsety=Alloffset.y()+offset.y();Alloffset.setY(offsety);action=painter::None;}if(abs(Alloffset.x())>=(Paint.width()/2 + NowW/2 -10)) //限制X偏移值{if(Alloffset.x()>0)Alloffset.setX(Paint.width()/2 + NowW/2 -10);elseAlloffset.setX(-Paint.width()/2 + -NowW/2 +10);}if(abs(Alloffset.y())>=(Paint.height()/2 + NowH/2 -10)) //限制Y偏移值{if(Alloffset.y()>0)Alloffset.setY(Paint.height()/2 + NowH/2 -10);elseAlloffset.setY(-Paint.height()/2 + -NowH/2 +10);}int x = Paint.width()/2 + Alloffset.x() -NowW/2;if(x<0)x=0;int y = Paint.height()/2 + Alloffset.y() -NowH/2;if(y<0)y=0;int sx = NowW/2 - Paint.width()/2 - Alloffset.x();if(sx<0)sx=0;int sy = NowH/2 - Paint.height()/2 - Alloffset.y();if(sy<0)sy=0;int w =(NowW - sx)>Paint.width()? Paint.width() : (NowW - sx);if(w>(Paint.width()-x))w = Paint.width()-x;int h =(NowH - sy)>Paint.height()? Paint.height() : (NowH - sy);if(h>(Paint.height()-y))h = Paint.height()-y;painter.drawTiledPixmap(x+Paint.x(),y+Paint.y(),w,h,crtPix,sx,sy); //绘画图形}bool painter::event(QEvent *event){static bool press = false;static QPoint PreDot;if(event->type() == QEvent::MouseButtonPress){QMouseEvent *mouse = dynamic_cast<QMouseEvent*>(event);//判断苏表左键按下且实在绘图区域内if(mouse->button() == Qt::LeftButton && Paint.contains(mouse->pos())){press = true;//QApplication::setOverrideCursor(Qt::OpenHandCursor); // 设置⿏标样式this->setCursor(Qt::OpenHandCursor);PreDot = mouse->pos();}qDebug() << "event press";}else if(event->type() == QEvent::MouseButtonRelease){QMouseEvent *mouse = dynamic_cast<QMouseEvent*>(event);//判断⿏标左键是否释放if(mouse->button() == Qt::LeftButton && press){QApplication::setOverrideCursor(Qt::ArrowCursor);press = false;}qDebug() << "event relesae";}if(event->type() == QEvent::MouseMove){//按下拖动才能实现if(press){QMouseEvent *mouse = dynamic_cast<QMouseEvent*>(event);offset.setX(mouse->x() - PreDot.x());offset.setY(mouse->y() - PreDot.y());PreDot = mouse->pos();action = painter::Move;this->update();}qDebug() << "event move";}return QWidget::event(event);}void painter::wheelEvent(QWheelEvent* event) //⿏标滑轮事件{if(event->delta()>0) { //上滑,缩⼩action=painter::Shrink;this->update();} else { //下滑,放⼤action=painter::Amplification;this->update();}event->accept();}void painter::onLittleClicked(){action=painter::Amplification;this->update();}void painter::onOpenClicked(){QString str = QFileDialog::getOpenFileName(this,"open","E:","img (*.png *.jpg)");if(!str.isNull()){image.load(str);pix = pix.fromImage(image);crtPix = pix;pixW = image.width(); //图⽚宽pixH = image.height(); //图⽚⾼qDebug()<<str<<pixW<<pixH;this->setWindowTitle(QStringLiteral("image read") + "(" + str + ")");onResetClicked();}}void painter::onBigClicked(){action=painter::Shrink;this->update();}void painter::onUpClicked(){action=painter::Move;offset.setX(0);offset.setY(-20);this->update();}void painter::onDownClicked(){action=painter::Move;offset.setX(0);offset.setY(20);this->update();}void painter::onResetClicked(){action=painter::Reset;Alloffset.setX(0);Alloffset.setY(0);ratio = 1.000;label.setText("100%");this->update();}void painter::OnLiftClicked(){action=painter::Move;offset.setX(-20);offset.setY(0);this->update();}void painter::OnRightClicked(){action=painter::Move;offset.setX(20) ;offset.setY(0) ;this->update();}painter.h#ifndef PAINTER_H#define PAINTER_H#include <QWidget>#include <QtGui>#include <QLabel>#include <QPushButton>#include <QComboBox>#include <QApplication>#include <QFileDialog>#include <QImage>class painter : public QWidget{Q_OBJECTprivate :QPixmap pix;QPixmap crtPix;int action; //动作(放⼤,缩⼩,移动...) int pixW; //图⽚宽int pixH; //图⽚⾼QRect Paint; //绘画区域QImage image; //打开的图⽚float ratio; //缩放⽐例QPoint offset; //⼀次的图⽚偏移值QPoint Alloffset; //总偏移QLabel label;QPushButton BigButton;QPushButton LittleButton;QPushButton LiftButton;QPushButton RightButton;QPushButton UpButton;QPushButton DownButton;QPushButton ResetButton;QPushButton OpenButton;void AddComboItem(QComboBox* cmbo);bool event(QEvent * event);void wheelEvent(QWheelEvent* e); //⿏标滑轮事件private slots:void onUpClicked();void onDownClicked();void onResetClicked();void OnLiftClicked();void OnRightClicked();void onLittleClicked();void onBigClicked();void onOpenClicked();void paintEvent(QPaintEvent *event);public:explicit painter();enum Type {None = 0,Amplification ,Shrink,Lift,Right,Up,Down,Move,Reset};signals:};#endif// PAINTER_H主要通过⿏标事件与定义的事件相关联,并通过重写painterEvent实现相关操作。

Qt-显示SVG格式图片

Qt-显示SVG格式图片

Qt-显⽰SVG格式图⽚SVG(Scalable Vector Graphics),即可缩放的⽮量图形,是规范中的⽹格⽮量图形标准,是⼀个开放的图形标准,有以下特点:基于XML表⽰的⽮量图形⽂件采⽤⽂本来描述对象具有交互型和动态性完全⽀持DOMSVG相对于GIF、JPEG格式的优势如下:⽂件⼩,对于⽹络⽽⾔,下载速度快可任意缩放⽽不会破坏图像的清晰度和细节图像中的⽂字独⽴于图像,⽂字保留可编辑和可搜寻状态,也没有字体限制,⽤户系统即使没⽤安装某⼀字体,也可看到与制作时完全相同的画⾯等Qt为SVG格式图⽚的显⽰与⽣成提供了专门的QtSvg模块,包含QSvgWidget、QSvgRender、QGraphicsSvgItem1. 添加头⽂件:#include <QtSvg>2. 响应⿏标的滚轮事件,使SVG图⽚能够通过⿏标滚轮的滚动进⾏播放:void wheelEvent(QWheelEvent *); void wheelEvent(QWheelEvent* e){const double diff = 0.1; //diff的值表⽰每次滚轮滚动⼀定的值,图⽚⼤⼩改变的⽐例QSize size = render()->defaultSize(); //获取图⽚显⽰区的尺⼨,以便进⾏缩放操作int width = size.width();int height = size.height();//QWheelEvent的delta()函数获得滚轮滚动的距离值,若距离值>0,则表⽰滚轮向前(远离⽤户的⽅向)滚动,反之表⽰向后(靠近⽤户的⽅向)滚动//⿏标滚动事件,滚轮每滚动1°,相当于移动8°,常见的滚轮⿏标拨动⼀下滚动的⾓度为15°,所以滚轮波动⼀下相当于移动了120(=15 * 8)°if(e->delta() > 0){//对图⽚的长、宽值进⾏处理,放⼤⼀定⽐例width = int(this->width() + this->width() * diff);height = int(this->height() + this->height() * diff);}else{//对图⽚的长、宽值进⾏处理,缩⼩⼀定⽐例width = int(this->width() - this->width() * diff);height = int(this->height() - this->height() * diff);}//利⽤新的长、宽值对图⽚进⾏resize()操作resize(width, height);}。

Qt4:Showanimageinyourwidget–在Qt里面显示图像

Qt4:Showanimageinyourwidget–在Qt里面显示图像

Qt4:Showanimageinyourwidget–在Qt⾥⾯显⽰图像很多⼈问,怎么快捷的在Qt⾥⾯显⽰图像。

个⼈以为,在Qt⾥⾯你的widget上显⽰图像的最简单⽅法就是⽤QImage和QPaint。

⽅法如下。

假设我们现在已经有了⼀个QImage的object。

怎么有的,这⾥不管。

QImage *pCurImage;…⾸先,我们要定义两个区域,⼀个是widget⾥⾯的显⽰区域,我们把它叫做DisplayDestArea。

另⼀个是image的区域,我们叫它DisplaySourceArea。

在qt4⾥⽤QRectF来定义这两个区域。

为什么?喜欢。

//显⽰区域为左上⾓坐标(130, 220),区域宽度640⾼度480QRectF DisplayDestArea = QRectF(130.0, 220.0, 640.0, 480.0); //显⽰全副图像,你当然也可以显⽰图像的⼀部分 QRectF DisplaySourceArea = QRectF(0, 0, pCurImage->width(), pCurImage->height());然后呢?显⽰啊。

⾸先,定义⼀个QPainterQPainter newPainter(this);然后呢?newPainter.drawImage(DisplayDestArea, *pCurImage, DisplaySourceArea);编译,通过,看看效果。

没有?!对,不奇怪,如果你没有把painter部分放到paintEvent()⾥⾯的话。

所以,我们应该要做的另⼀件事就是:重载paintEvent函数。

⾸先,在类的声明⾥⾯说明要重载的函数:void paintEvent(QPaintEvent *event);然后,当然就是在合适位置放置代码:1void PreviewWindow::paintEvent(QPaintEvent *event)2 {3 QRectF DisplayDestArea = QRectF(130.0, 220.0, 640.0, 480.0);4 QRectF DisplaySourceArea = QRectF(0, 0, pCurImage->width(), pCurImage->height());5 QPainter newPainter(this);6 newPainter.drawImage(DisplayDestArea, *pCurImage, DisplaySourceArea);7 }现在呢?呵呵,搞定。

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

如何实现QT窗口背景图片随窗口大小而变化
最近在学习QT。

给窗口添加背景图片后,但是把窗口最大化后,因为图片小,重复出现了,如何实现背景图片随窗口大小而变化呢?
求高手解答!
------解决方案--------------------------------------------------------
用setStylesheet加载图片方式
background-image 和border-image 测试下哪个效果正确
------解决方案--------------------------------------------------------
方案一:使用paintEvent
C/C++ code
void Widget::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.drawPixmap(0,0,this->width(),this->height(),QPixmap(":/xx x.png"));
}
------解决方案--------------------------------------------------------
setStyleSheet("border-image: url(:/xxx.png)");
------解决方案--------------------------------------------------------
我知道的有两种方法
1.用setStyleSheet .这里要注意使用border-image而不是image和backgrou nd
2.用scaled方法,传递一个QSize参数,这个参数就是你窗口的size。

相关文档
最新文档