• 5531阅读
  • 2回复

[提问]一个小问题 关于close()的问题 谢谢各位大大 [复制链接]

上一主题 下一主题
离线cctom25
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-18
最近在做毕设  一个简单的点菜系统 今天出现了这样一个小问题
在程序中 用到了close()关闭窗口的命令  结果一运行 就出现停止响应的问题  现把程序发上来 请各位指导 谢谢
文件
#ifndef INTERFACE_H
#define INTERFACE_H
#include"QGraphicsView"
#include"QGraphicsScene"
#include"QGraphicsItem"
#include "iconitem.h"
//#include "dialog.h"
//包含tablemodel例子头文件
class interface:public QGraphicsView
{
    Q_OBJECT
public:
    interface(QWidget *parent = 0);
    void addItems();             //增加iconitem
    void menuinfo();
    void HelpInfo();
    void tableinfo();
    void booking();
    void opentable();
    void userinfo();
    void print();
    void calendar();
    void close();
    void debug();
    void exit();
protected:
    void mouseDoubleClickEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);

private:
    QGraphicsScene *scene;
    QStringList icon_name;
    iconitem *image;
    //Dialog *dish;
    //Dialog *table;
    //Dialog *user;




};
#endif // INTERFACE_H


源文件 #include "interface.h"

#include"QGraphicsPixmapItem"
#include"QMouseEvent"
#include"QGraphicsDropShadowEffect"
#include <QGraphicsItem>

interface::interface(QWidget *parent )
    :QGraphicsView(parent)
{
    //实例化GraphicsScene
    this->scene=new QGraphicsScene(this);
    scene->setSceneRect(0,0,636,476);
    setGeometry(0,0,640,480);
    setMinimumSize(640, 480);
    setMaximumSize(640, 480);
    setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
    setScene(scene);
    //在场景中加入item
    this->addItems();
    //在mainInterface-GraphicsView中加入scene。
    this->setScene(this->scene);
}


void interface::addItems()
{
    //增加背景图片item
    QGraphicsPixmapItem *backimage=this->scene->addPixmap(QPixmap(":/images/002.jpg"));
    backimage->setPos(0,0);
    //初始化图片文本
    QString str="Help#Calendar#Menu Info#Table Info#Booking#OpenTable#User#Print";
    this->icon_name=str.split("#");
    //增加向导图标iconitem
    int imageCount=icon_name.count();
    int imageOffset =160;
    int leftMargin = 35;
    int topMargin =50;

    QFont font("Arial", 15, QFont::Bold);

    for (int i = 0; i < imageCount; ++i) {
        QGraphicsTextItem *label = new QGraphicsTextItem;

        int columnOffset = -((i / 4) * 20);
        int x = ((i % 4) * imageOffset) + leftMargin;
        int y = ((i / 4) * imageOffset) + topMargin + columnOffset;

        image = new iconitem(i,QPixmap(tr(":/images/%1.png").arg(i+1)));
        image ->setPos(x, y);
        scene->addItem(image);
        //设置影子
        QGraphicsDropShadowEffect *DropShadow = new QGraphicsDropShadowEffect(this);
        DropShadow->setOffset(10,10);
        image->setGraphicsEffect(DropShadow);
        //设置透明度
        QGraphicsOpacityEffect *opacity = new QGraphicsOpacityEffect(this);
        opacity->setOpacity(0.8);
        image ->setGraphicsEffect(opacity);

        label = scene->addText(icon_name,font);
        QPointF labelOffset(((70 - label->boundingRect().width()) / 2), 85);//(51.2 - label->boundingRect().width()) / 2)
        label ->setPos(QPointF(x, y) + labelOffset);
      //  label ->setDefaultTextColor(QColor(255,255,255));
    }
}
//双击鼠标左键,结束应用程序
void interface::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
        this->close();
    }
}
void interface::close()
{
    this->close();
}
void interface::debug()
{
    qDebug()<<"delete";
}

/*void interface::menuinfo()
{
    //实例化tablemodel类的对象
    //show
    dish = new Dialog();    //dish 为dialog型的指针

    dish->show();


}

void interface::tableinfo(){

table = new Dialog();
table->show();
}

void interface::calendar(){


}
void interface::booking(){

}
void interface::opentable(){


}
void interface::userinfo(){


}

*/
void interface::mouseReleaseEvent(QMouseEvent *event)
{
   if( QGraphicsItem *item =  itemAt(event->pos()))
   {
       if (qgraphicsitem_cast<iconitem *>(item))  //<>判断类型 item是值
       {

           if (iconitem *image = qgraphicsitem_cast<iconitem *>(item))
            {
                switch(image->id())
                {
                    case 0:debug();break;
             //       case 1:calendar();break;

                case 2:close();break;
                //case 3:tableinfo();break;
              //  case 4:booking();break;
              //  case 5:opentable();break;
              //  case 6:userinfo();break;
              //  case 7:print();break;


                }
            }
        }
   }
}


一运行close就会停滞工作 谢谢大家







离线myer

只看该作者 1楼 发表于: 2012-03-19
void interface::close()
{
    this->close();
}
调用close的时候,死循环了。
http://user.qzone.qq.com/56430808
离线cctom25
只看该作者 2楼 发表于: 2012-03-19
非常感谢 问题解决了  
快速回复
限100 字节
 
上一个 下一个