• 8657阅读
  • 10回复

[提问]请教:Qt继承的问题 [复制链接]

上一主题 下一主题
离线sj4268778
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-31
关键词: qtC++Dialog继承
Qt 4的参考书中有这样的构造函数:FindDialog::FindDialog(QWidget *parent): QDialog(parent) 书中的解释是把parent参数传递给了基类的构造函数。然后,创建了子窗口部件。
我有点不太明白,我以前学过C和java,刚接触C++的面向对象思想,为什么类已经继承了,还要在构造函数上继承,而且继承用的指针parent是什么意思,为什么要这样继承,请大家指点一下,谢谢了
离线xt_mickey

只看该作者 1楼 发表于: 2011-03-31
呃,我也是新手,说说我的理解。
这个parent不是你所谓的被继承的对象,而是一个简单的设置这个组件的上一层组件。不可望文生义。比如说,你有一个对话框,而这个对话框里的widget们的parent就应该设置成这个对话框的地址。
类的继承,相当于把原来的类进行扩展,当然要重新写新类的构造函数,finddialog继承自qdialog,而qdialog里已经有了保存parent信息的地方,不用你再写一遍,但是你构造函数得parent传递给基类也就是qdialog的构造函数,让它完成finddialog的parent的设置。

呃,我也刚把第一部分看完,写的有些啰嗦,互相进步吧。
离线83888788
只看该作者 2楼 发表于: 2011-03-31
parent 是父亲控件的指针,而非父类
QDialog是父类

这样说吧

class YourDialog:public QDialog
{
    YourDialog(QWidget *parent=NULL):QDialog(parent)
        {
                label=new QLabel("i will be the son widget of  y,and i am the subClass of QFrame");
                this->setWindowTitle("i will be son widget of  m ,and i am the subClass of QDialog");
        }
        QLabel *lable;
};

QMainWindow *m new QMainWindow(NULL);
YourDialog *y=new YourDialog(m);

随便写了下,可能有错

这里 y是m的自控件,但是你要如何构建一个y呢?
因为y是从QDialog继承的,所以你要调用它的构造函数,
如果不调用会用默认的构造函数,但是我们一般需要指定一个空间的父控件(widget)
我们把这个父控件的指针作为参数传到其父类(QDialog)构造函数中
所以就有了parent

这里m是没有父控件的
而label的父控件是y
离线facatcool
只看该作者 3楼 发表于: 2011-03-31
要让基类执行一些操作
离线jdwx

只看该作者 4楼 发表于: 2011-03-31
是对基类成员进行初始化。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 5楼 发表于: 2011-03-31
你在构造FindDialog的时候需要向FindDialog提供其父对象,同时这个父对象也会作为FindDialog的基类QDialog初始化的时候的父对象
因为继承出来的类在初始化的时候首先要将其基类初始化,而基类初始化的时候需要的参数就要向那样进行传递
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线sj4268778
只看该作者 6楼 发表于: 2011-03-31
回 1楼(xt_mickey) 的帖子
谢谢啦!!
离线sj4268778
只看该作者 7楼 发表于: 2011-03-31
回 2楼(83888788) 的帖子
感谢啦!!
离线sj4268778
只看该作者 8楼 发表于: 2011-03-31
回 3楼(facatcool) 的帖子
谢谢啦!!!
离线sj4268778
只看该作者 9楼 发表于: 2011-03-31
回 4楼(jdwx) 的帖子
谢谢啦!!!!
离线sj4268778
只看该作者 10楼 发表于: 2011-03-31
回 5楼(roywillow) 的帖子
谢谢啦!!!!!
快速回复
限100 字节
 
上一个 下一个