今天无意中发现一张图片在qt程序中出现问题,QPixmap加载jpg图片后执行save操作,返回失败了,失败原因不知道,往前追踪,发现new QPixmap(imagePath)后判断isNull()直接返回true,也就是加载的时候就已经失败了,但是从windows的资源管理中查看分明就是一张正常的图片。图片查看器也能正常打开它。偶然灵光一闪,将他的后缀改为了.png,突然就没问题了。想必QT依赖后缀名动态使用qjpeg.dll等动态库解析图片。于是写了一段兼容处理的代码
QPixmap* getRealPixmap(QString filePath){
QPixmap *pPixmap = new QPixmap(filePath);
if(!pPixmap->isNull()){
return pPixmap;
}else{
delete pPixmap;
pPixmap = nullptr;
QImageReader reader(filePath);
reader.setDecideFormatFromContent(true);
if(reader.canRead())
QImage image;
if(reader.read(&image))
pPixmap = new QPixmap(QPixmap::fromImage(image));
CLog::log(QString("read %1 success").arg(filePath), LOG_PARAM);
CLog::error(QString("read %1 return false [%2]")
.arg(filePath).arg(reader.errorString()), LOG_PARAM);
CLog::error(QString("%1 canRead return false").arg(filePath), LOG_PARAM);
return pPixmap;
先直接new出一个QPixmap,如果isNull()为true,就是解析失败了,再用QImageReader解析
今天无意中发现一张图片在qt程序中出现问题,QPixmap加载jpg图片后执行save操作,返回失败了,失败原因不知道,往前追踪,发现new QPixmap(imagePath)后判断isNull()直接返回true,也就是加载的时候就已经失败了,但是从windows的资源管理中查看分明就是一张正常的图片。图片查看器也能正常打开它。偶然灵光一闪,将他的后缀改为了.png,突然就没问题了。想必QT依赖后缀名动态使用qjpeg.dll等动态库解析图片。于是写了一段兼容处理的代码QPixmap* getRe
测试QLayout和QLabel加载图片的demo
MyDebug << "label1->size" << label1->size();
QString path = QCoreApplication::applicationDirPath();
path = QFileDialog::getOpenFileName(this, "open image", path, tr("Images (*.png *.xpm *.jpg)"));
QPixmap pixmap(path);
MyDebug << "pixmap.size = " << pixmap.size();
//pixmap = pixmap.scaled(label1->size());//没有考虑QLabel的线宽,导致label1比加载图片前大了两个线宽
pixmap = pixmap.scaled(label1->width()-label1->lineWidth()*2,
label1->height()-label1->lineWidth()*2);
label1->setPixmap(pixmap);
MyDebug << "label1->size" << label1->size();
MyDebug << "pixmap.size = " << pixmap.size();
我用Qimage读取两张jpg图片(2.jpg和00001.jpg)方式如下:
QImage qimg;
qimg.load(strStartPath);// strStartPath为图片完整路径
结果发现载入2.jpg正常,但载入00001.jpg后,qimg为null
经过后来对比两张图片的二进制文件之后发现00001.jpg其实不是jpg格式的图片,而是PNG图片,如下图:
所以解决方法如下:
QFile file(strStartPath);
file.open(QIODevice::Read
在ARM开发板上运行的Qt程序可以很好的支持png格式,但唯一的问题是,png格式的图像太大了,这对于资源有限的嵌入式系统来说绝对是一个不容忽视的问题。解决方法之一就是改用jpg格式的图像,但是在这之前,你还需要完成以下工作。
在移植Qt到ARM开发板时,有一个编译参数一般设置为-qt-libjpeg,显而易见,这个参数与显示jpg图像有关。以下叙述的一切内容,都以在移植Qt时设置了这样一个参数
其中image是QImage类型的对象,加载了一个名为为1.svg的图片,当调用save时,返回值始终是false。感觉svg类型的图片不能用QImage类的save保存,通过述代码保存可以成功:
QSvgGenerator generator;
generator.setFileName(qsSaveFilePath)
处理jpg图片后保持图片dpi1、必须载入qjpeg.dll库2、QImage通过load加载图片并读取水平分辨率和垂直分辨率3、处理修改一下图片4、通过QImage设置水平分辨率和垂直分辨率并保存图片
1、必须载入qjpeg.dll库
#include "mainwindow.h"
#include <QApplication>
#include "src/utils/utils.h"
int main(int argc, char *argv[])
printLog("载入q
http://blog.csdn.net/ibingow/article/details/7882098
qmake 工程中的写法:
QMAKE_LFLAGS += -Wl,-rpath,\'\$\$ORIGING\'
QMAKE_RPATHDIR += :\'\$\$ORIGING\'
注意QMAKE_RPATHDIR最开始
未打包成exe,但依旧可以解决。
将文件夹 anaconda/envs/name/libs/site-packages/PySide2/plugins(不是 plugins/imageformats!),复制到某个指定位置(我复制到main.py同目录下,当然哪里都可以),然后在调用 QApplication 之前,加上代码,如下:
if __name__ == '__main__':
import sys
import os
from PySide2.QtWidgets im
目前对应用实现截屏的方法还是比较多的,首先我们要了解Qt中的窗口的是如何设计的,不管是MFC下的窗口,还是其他窗口,仿佛都相似,曾经狂学MFC,结果毕业一次没用过已经还给老师,悲催,好了下面我们来介绍一下Qt的窗口设计吧!鸡冻吧….
1.首先我们来看看我从手册上盗取的图片,哦!NO,是借用。
我们了解了Qt的窗口框架,让我们来看看她(羞涩的小菇凉,想多了….)提供的几个函数吧!
Qt某小项目开发。开发环境为windows+Qt 4.7.0+vs2008+mysql 5 ,客户部署环境为Solaris10。
二 问题描述
Qt在widget界面上绘图,可以将界面绘制的图像保存到用户指定的位置。用户通过保存文件对话框选择要保存图片的路径。在开发环境中,即在windows下保存图片功能可用,到了solaris下却不能实现保存图片这个功能。
三 问题分
QScreen *screen_test = QGuiApplication::primaryScreen();
获取截图,可以自定义起始点和宽高,获取界面自己需要的部分,宽高-1是获取整个
QPixmap pixmap_test = screen_test->grabWindow(this->winId(),0,0,-1,-1);
保存图片,路径要双斜杠,且已存在,(路径如果不存在,不会自动创建文件夹,截图失败)
pixmap_test.sa
QByteArray imageData; // 假设这里是JPG数据
QImage image;
image.loadFromData(imageData, "JPG"); // 加载JPG数据到QImage中
QString fileName = "image.jpg"; // 保存的文件名
if(image.save(fileName, "JPG")) {
qDebug() << "保存成功!";
} else {
qDebug() << "保存失败!";
上述代码中,首先将JPG数据加载到QImage中,然后将QImage保存到本地文件中。需要注意的是,保存的文件格式要与加载数据时指定的格式相同,否则保存会失败。