• 4356阅读
  • 3回复

[讨论]QT深入探讨 [复制链接]

上一主题 下一主题
离线zdq123
 
只看楼主 倒序阅读 楼主  发表于: 2011-10-06

#include <QtGui/QApplication>
#include "widget.h"
#include  <QPushButton>
#include <QSlider>
#include <QSpinBox>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget *w=new QWidget;
    QSlider *l=new QSlider(Qt::Horizontal);
    l->setRange(0,100);
    QSpinBox *m=new QSpinBox;
    m->setRange(0,100);
    QHBoxLayout *b=new QHBoxLayout;
    b->addWidget(l);
    b->addWidget(m);
    w->setLayout(b);
    QObject::connect(l,SIGNAL(valueChanged(int)),m,SLOT(setValue(int)));
    QObject::connect(m,SIGNAL(valueChanged(int)),l,SLOT(setValue(int)));
    w->show();
    return a.exec();
}
以上代码改成以下认可运行

#include <QtGui/QApplication>
#include "widget.h"
#include  <QPushButton>
#include <QSlider>
#include <QSpinBox>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
   QWidget  w;
    QSlider  l;
    l.setRange(0,100);
   QSpinBox m;
    m.setRange(0,100);
    QHBoxLayout b;
    b.addWidget(&l);
    b.addWidget(&m);
    w.setLayout(&b);
    QObject::connect(&l,SIGNAL(valueChanged(int)),&m,SLOT(setValue(int)));
    QObject::connect(&m,SIGNAL(valueChanged(int)),&l,SLOT(setValue(int)));
    w.show();
    return a.exec();
}
这两种有什么主要区别,采取第一种有什么突出优点吗?
离线roywillow

只看该作者 1楼 发表于: 2011-10-06
上面的那个代码
QWidget *w=new QWidget;
之后没见到delete
其他的也是,没见到delete
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 2楼 发表于: 2011-10-06
两种写法都不是好的方案。一般来说,第一个QWidget分配在栈上,其子控件分配到堆上。

可以凑活看看这个:
http://blog.csdn.net/dbzhang800/article/details/6300025
离线friendbaby

只看该作者 3楼 发表于: 2011-10-06
堆和栈的区别可以用如下的比喻来看出:   
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。   

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
Smiling is best language , can express everything , also can conceal everything.
快速回复
限100 字节
 
上一个 下一个