• 6073阅读
  • 4回复

关于窗口画图的问题:窗口闪了一下又突然消失 [复制链接]

上一主题 下一主题
离线inshine
 

只看楼主 倒序阅读 楼主  发表于: 2006-06-20
关于窗口画图的问题:窗口闪了一下又突然消失
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <qwidget.h>
#include <qdialog.h>
#include <qapplication.h>
#include <qpainter.h>
#include <qpoint.h>
#include <qcolor.h>
#include <qpen.h>
#include "qpaintwidget.h"

ConnectWidget::ConnectWidget(QWidget *parent, const char *name)
:QWidget(parent,name)
{
setBackgroundColor(white);
};

ConnectWidget::~ConnectWidget()
{
//delete[] points;
};

void ConnectWidget::initpoints(QPoint *psrc,int num,int mode)
{
//这里应该无所谓的
  int i;
  for(i=0;i<num;i++)
      this->points=psrc;
  pointnum=num;
  labelmode=mode;
//这里应该无所谓的
};

void ConnectWidget::paintEvent(QPaintEvent* )
{
//这里是画图的,应该关系不大
  QPainter paint(this);
  QPen pen;
  //draw the axis
  //black,width 3,solid
  pen.setWidth(2);
  pen.setStyle(SolidLine);
  pen.setColor(black);
  paint.setPen(pen);
  paint.drawLine(QPoint(50,50),QPoint(50,400));
  paint.drawLine(QPoint(50,400),QPoint(600,400));
  paint.drawLine(QPoint(50,50),QPoint(45,60));
  paint.drawLine(QPoint(50,50),QPoint(55,60));
  paint.drawLine(QPoint(590,395),QPoint(600,400));
  paint.drawLine(QPoint(590,405),QPoint(600,400));


  //draw the lines
  pen.setWidth(1);
  pen.setStyle(SolidLine);
  pen.setColor(red);
  paint.setPen(pen);
for(int i=0;i<pointnum-1;i++)
{
    paint.drawLine(points, points[i+1]);
}

  pen.setWidth(2);
  pen.setStyle(SolidLine);
  pen.setColor(green);
  paint.setPen(pen);
switch(labelmode)
  {
  case 1:
  paint.drawText(QPoint(500,50),"Time diagram",-1);
  break;
  case 2:
  paint.drawText(QPoint(500,50),"Speed diagram",-1);
  break;
  case 3:
  paint.drawText(QPoint(500,50),"Distance diagram",-1);
  break;
  case 4:
  paint.drawText(QPoint(500,50),"Pulse diagram",-1);
  break;
  default:
  break;
  }
//这里是画图的,应该关系不大

};
为什么我程序中
  ConnectWidget cw;
  cw.initpoints(points,num,1);
  cw.resize(640,480);
  cw.show();
窗口只是闪了一下就消失了,如果改成
  ConnectWidget cw;
  cw.initpoints(points,num,1);
  cw.resize(640,480);
  cw.show();
  QMessageBox::information( this, "Application name","OK");
窗口就会显示出来。
请问如何不加QMessageBox::information( this, "Application name","OK");仍然可以显示出窗口,直到把窗口关闭。
[ 此贴被inshine在2006-06-21 20:50重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2006-06-21
楼主把你的问题归纳一下,定下标题
”紧急求助“不知所云
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线myer

只看该作者 2楼 发表于: 2006-06-22
上下文不太明确,是否是ConnectWidget cw;(局部变量)的问题?
改为new 试试?

建议把运行环境简要提一下,关键代码贴一段,无关的就不要贴了,如果
代码太多,有耐心看完的呵呵,不太多呢
http://user.qzone.qq.com/56430808
离线shiroki

只看该作者 3楼 发表于: 2006-06-22
肯定是局部变量的问题。 不过只贴有关的代码要求比较高啊,要是人家知道哪段代码是有关的,离自己解决问题也不远了。
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线inshine

只看该作者 4楼 发表于: 2006-06-24
多谢帮助,搞定了!
改成new的方式就可以了。
快速回复
限100 字节
 
上一个 下一个