• 6453阅读
  • 4回复

关于窗口的创建 [复制链接]

上一主题 下一主题
离线20071000
 

只看楼主 倒序阅读 楼主  发表于: 2010-12-24
本人新手

遇到一个问题
我写了一个类
  1. class PictureProcess: public QObject
  2. {
  3. Q_OBJECT
  4. public:
  5.     PictureProcess(QObject *parent = 0);
  6.     void showImage(QImage* tmp);
  7.     QImage* getImage();
  8.     QImage* toGray(QImage* tmp);
  9. private:
  10.     QImage* image;
  11. };

我想把一张图转为灰度的
然后调用showImage把图片显示出来
我希望每幅图用一个小窗口显示
于是
  1. void PictureProcess::showImage(QImage* tmp)
  2. {
  3.     QLabel* label = new QLabel;
  4.     QPixmap* pixmap = new QPixmap;
  5.     pixmap->fromImage(*tmp);
  6.     label->setPixmap(*pixmap);
  7.     label->show();
  8. }



在主程序中使用
  1. int main(int argc, char *argv[])
  2. {
  3.     QApplication a(argc, argv);
  4.     PictureProcess* w = new PictureProcess;
  5.     w->showImage(w->getImage());
  6.     w->showImage(w->toGray());
  7.     return a.exec();
  8. }

运行时总是出错
我也觉得这样做貌似不对头
希望达人提出正确方法,谢谢

PS:我希望每幅图使用一个小窗口,而不是一个窗口显示所有图
[ 此帖被20071000在2010-12-24 15:22重新编辑 ]
离线20071000

只看该作者 1楼 发表于: 2010-12-24
没有人给一点意见吗?
离线roywillow

只看该作者 2楼 发表于: 2010-12-24
话说都是传指针返回指针的感觉这种用法不好吧,用引用也行啊。
另外出错的信息是啥?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线cycloneii

只看该作者 3楼 发表于: 2010-12-24
至于这么复杂吗?
你要同时显示两个窗口,只需要两个顶层的QWidget即可

QApplication a(argc, argv);
QLabel label1;
label1->setPixmap(QPixmap(":/images/image1.png");
label1->show();
QLabel label2;
label2->setPixmap(QPixmap(":/images/image2.png");
labe2->show();
return a.exec();

老实说你的代码让我很困惑,showImage里面直接new了QLabel和QPixmap,但是又没有指定父对象,这样不是有内存泄露吗?
离线20071000

只看该作者 4楼 发表于: 2010-12-25
引用第4楼cycloneii于2010-12-24 22:26发表的  :
至于这么复杂吗?
你要同时显示两个窗口,只需要两个顶层的QWidget即可
QApplication a(argc, argv);
QLabel label1;
.......



谢谢你的回答
你的方法我考虑过
但我的想法等同于给QImage加一个ShowImage方法
类似于调用QImage.ShowImage()就能弹出一个窗口显示该图片
本来是想写一个类包装一下QImage的
但觉得也可以写个简单函数ShowImage(QImage *)就实现此功能
但一直失败
你的方法是在main函数中新建,但我不知道到底要显示几个图片,不想一直改来改去的
快速回复
限100 字节
 
上一个 下一个