以下是Qt Assissant(3.2.1)中的Qt Tutorial-Chapter 6 原代码:
#include<qapplication.h>
#include<qpushbutton.h>
#include<qslider.h>
#include<qlcdnumber.h>
#include<qfont.h>
#include<qvbox.h>
#include<qgrid.h>
class LCDRange : public QVBox
{
public:
LCDRange(QWidget *parent=0,const char *name=0);
};
LCDRange::LCDRange(QWidget *parent,const char *name)
:QVBox(parent,name)
{
QLCDNumber *lcd=new QLCDNumber(2,this,"lcd");
QSlider *slider=new QSlider(Horizontal,this,"slider");
slider->setRange(0,99);
slider->setValue(0);
connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)));
}
class MyWidget : public QVBox
{
public:
MyWidget(QWidget *parent=0,const char *name=0);
};
MyWidget::MyWidget(QWidget *parent,const char *name)
:QVBox(parent,name)
{
QPushButton *quit=new QPushButton("Quit",this,"quit");
quit->setFont(QFont("Times",18,QFont::Bold));
connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));
QGrid *grid = new QGrid(4,this);
for(int r=0;r<4;r++)
for(int c=0;c<4;c++)
(void)new LCDRange(grid);
}
int main(int argc,char **argv)
{
QApplication a(argc,argv);
MyWidget w;
a.setMainWidget(&w);
w.show();
return a.exec();
}
问题:
1:主要是对QGrid类不太理解! Qt的解释好象是说QGrid的对象 可以将其子类按指定的个数 排列出来!
高手觉得我这个理解对不对?? 比如下面的代码:
QGrid *grid = new QGrid(4,this);
for(int r=0;r<4;r++)
for(int c=0;c<4;c++)
(void)new LCDRange(grid);
我的理解是:new LCDRange(grid)目的是 将LCDRange的 对象作为grid(QGrid的对象)的子类,这样LCDRange
的对象就通过grid一每行四个的 格式排列出来!!!
其中的 :
for(int r=0;r<4;r++)
for(int c=0;c<4;c++)
我感觉其作用就是产生4*4(16)个LCDRange对象 这样grid就会产生4行4列个LCDRange对象
于是我就用:
for(int a=0;a<16;a++)
代替了以上代码!!编译结果完全一样(程序运行结果是一样的,内在是不是一样我就不清楚了!)
我想问问 我这样做 会不会有潜在的 错误??? 我对代码的理解是否有问题??!!!
2: (void)new LCDRange(grid); 这句中的((void))是什么意思???有什么作用????
我把((void))删了结果程序还是很正常!!!!((viod))这在C++中是算什么语法??
3:我始终都不能很清楚的理解 子对象和父对象 的用法!!!高手可否指点指点!!书上对这些说得也不多!!!!
比如说:
QLCDNumber *lcd=new QLCDNumber(2,this,"lcd");
QSlider *slider=new QSlider(Horizontal,this,"slider");
都在新建对象时用this指针 把自己作为子对象传递给父对象 这样做是为了什么??? 有什么作用吗????
如果不建父对象有什么影响?????
[ 此贴被XChinux在2007-08-12 22:40重新编辑 ]