QT加载图片和绘画

班公湖里洗过脚 2012-03-13 03:54:08
源程序:
#include<qapplication.h>
#include<qpainter.h>
#include<qpicture.h>
#include<qpixmap.h>
#include<qwidget.h>
#include<qmessagebox.h>
#include<qfile.h>
#include<ctype.h>

void paintCar(QPainter *p)
{
QPointArray a;
QBrush brush(Qt::yellow,Qt::SolidPattern);
p->setBrush(brush);

a.setPoints(5,50,50,350,50,450,120,450,250,50,250);
p->drawPolygon(a);

QFont f("courier",12,QFont::Bold);
p->setFont(f);

QColor windowColor(120,120,255);
brush.setColor(windowColor);
p->setBrush(brush);
p->drawRect(80,80,250,70);
p->drawText(180,80,150,70,Qt::AlignCenter,"--Qt --\nTrolltech AS");

QPixmap pixmap;
if(pixmap.load("jing.bmp"))
p->drawPixmap(100,85,pixmap);
p->setBackgroundMode(Qt::OpaqueMode);
p->setBrush(Qt::DiagCrossPattern);
p->drawEllipse(90,210,80,80);
p->setBrush(Qt::CrossPattern);
p->drawEllipse(310,210,80,80);
}

class PictureDisplay:public QWidget
{
public:
PictureDisplay(const char *fileName);
~PictureDisplay();
protected:
void paintEvent(QPaintEvent *);
void keyPressEvent(QKeyEvent *);
private:
QPicture *pict;
QString name;
};

PictureDisplay::PictureDisplay(const char *fileName)
{
pict=new QPicture;
name=fileName;
if(!pict->load(fileName))
{
delete pict;
pict=0;
name.sprintf("Not able to load picture:%s",fileName);
}
}

PictureDisplay::~PictureDisplay()
{
delete pict;
}

void PictureDisplay::paintEvent(QPaintEvent *)
{
QPainter paint(this);
if(pict)
paint.drawPicture(*pict);
else
paint.drawText(rect(),AlignCenter,name);
}

void PictureDisplay::keyPressEvent(QKeyEvent *k)
{
switch(tolower(k->ascii()))
{
case 'r':
pict->load(name);
update();
break;
case 'q':
QApplication::exit();
break;
}
}


int main(int argc,char **argv)
{
QApplication a(argc,argv);
const char *fileName="car.pic";

if(argc==2)
{
fileName=argv[1];
}

if(!QFile::exists(fileName))
{
QPicture pict;
QPainter paint;

paint.begin(&pict);
paintCar(&paint);
paint.end();

pict.save(fileName);
QMessageBox::information(0,"Qt Example - Picture","Saved.Run me agein!");
return 0;
}
else
{
PictureDisplay test(fileName);
a.setMainWidget(&test);
test.setCaption("Qt Example - Picture");
test.show();

return a.exec();
}
}




这个例子是QT帮助文档的示例,名字叫picture
运行时怎么加载不了图片,两张图片都和.cpp文件在同一个目录下。
运行提示为
QPicture::checkFormat: Incorrect header
我看了一下头文件,我都加了怎么还是运行显示不了图片,求解
...全文
754 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
嗯,自动生成了car.pic文件,双击打不开,只有在终端用命令./picture才可以打开
谢谢了
xiachm 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenyijun 的回复:]

嗯,是QT3的例子,
编译生成的文件为picture
我在终端./picture这样运行时不出图片
当我在picture文件夹中双击picture这个可执行文件时又出现了图片
是什么原因呢?
[/Quote]
这个程序第一次启动时就是不显示图片呀,它会生成car.pic,并在你第二次启动时显示。
xiachm 2012-03-13
  • 打赏
  • 举报
回复
楼主在帖子中提到拷贝了两个图片文件。这就有问题,你的那张car.pic是怎么来的?它应该是软件生成的呀
  • 打赏
  • 举报
回复
嗯,是QT3的例子,
编译生成的文件为picture
我在终端./picture这样运行时不出图片
当我在picture文件夹中双击picture这个可执行文件时又出现了图片
是什么原因呢?
xiachm 2012-03-13
  • 打赏
  • 举报
回复
楼主的代码我看明白了,程序运行起来,先检查当前路径下有没有car.pic这个文件,如果没有会调用paintCar来生成一张图片。下次再运行是会显示这个图片。

这些代码太古老了,是Qt3的,算算至少得有10多年的历史了。
xiachm 2012-03-13
  • 打赏
  • 举报
回复
另外看提示似乎是格式有问题,你可以再换张图片看看
xiachm 2012-03-13
  • 打赏
  • 举报
回复
用绝对路径试一下

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧