正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话

23 篇文章 3 订阅
订阅专栏

 

该如何理解下面段代码的第二行QWidget(parent)

1 Widget::Widget(QWidget *parent) :
2    QWidget(parent)
3 {
4 }

 

在讲解原因之前,先请大家看下面的一个例子

#include <iostream>
using namespace std;
class Base
{
public:
    Base() :m_num(0){
        cout << "this is Base()" << endl;
    }
    Base(int val):m_num(val){
        cout << "this is Base(int val)" << endl;
    }
private:
    int m_num;
};

1 上方代码定义了一个基类Base,并且有两个构造函数,一个是默认构造函数,一个是有一个整型参数的构造函数。

 

class BaseChild: public Base
{
public:
    BaseChild(){
        cout << "this is BaseChild()" << endl;
    }
    BaseChild(int val): Base(val){
        cout << "this is BaseChild(val)" << endl;
    }
private:
    int m_num;
};

2 上方代码定义了一个BaseChild类,并继承Base类,同样的,它也定义了两个构造函数,一个默认,一个有整型参数。

 

int main(int argc, char *argv[])
{
    BaseChild child1;
    BaseChild child2(5);

    return 0;
}

3 main函数实例化了两个子类实例,child1,child2。child1调用默认构造函数。child2调用有整型参数的构造函数。

现在,我们运行程序,会有如下打印:

看到了吗,我们发现:

  • 创建child1时,是先调用了Base的默认构造函数,再调用自己的默认构造函数
  • 创建child2时,是先调用了Base(int)这个构造函数,再调用自己的整型参数构造函数。

 

所以我们回头看BaseChild的构造函数

BaseChild(int val): Base(val){
        cout << "this is BaseChild(val)" << endl;
    }

细心的同学,可能早就发现了,初始化列表中的Base(val)正是调用了我们Base基类的有参构造函数,而这样的写法就刚好是我们开头代码中的那段

Widget::Widget(QWidget *parent) :QWidget(parent)

所以Widget是调用了QWidget下面的构造函数

QWidget(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());

 

所以得出如下总结:

总结:  · 如果不指定构造函数,则派生类会调用基类的默认构造函数  · 派生类构造函数的初始化列表只能初始化派生类成员,不能直接初始化继承成员,如果想 要调用基类的有参构造函数,则可以在派生类的初始化列表中显示指定

以上总结,也告诉我们,当定义一个类时,最好为该类定义默认构造函数。

 

至此,我们明白了这个写法为什么会这样写。

 

好的,那么我们又提出一个问题,“调用QWidget(parent)这个构造函数,QWidget父类都做了哪些动作呢?”

下面是QWidget源码中的一部分节选:

QWidget::QWidget( QWidget *parent, const char *name, WFlags f )
    : QObject( parent, name ), QPaintDevice( PDT_WIDGET ),
      pal( parent ? parent->palette()		// use parent's palette
           : *qApp->palette() )			// use application palette
{
    if ( parent ) {
	QChildEvent *e = new QChildEvent( Event_ChildInserted, this );
	QApplication::postEvent( parent, e );
    }
}

大家从上面可以看出,如果parent参数非空的话,那么该构造函数使用了其父窗口的调色板,并且发送了QChildEvent事件,这会让新的窗口成为parent所指窗口的子窗口,那么当父窗口被删除时,子窗口也会自动的被删除。

Qt学习笔记1-窗口部件
al_888的博客
09-08 568
窗口与子部件 窗口部件(Widget)简称部件,是Qt中建立用户界面的主要元素。像主窗口、对框、标签、还有以后要介绍到的按钮、文本输入框等都是窗口部件。这些部件可以接收用户输入、显示数据和状态信息,并且在屏幕上绘制自己。有些也可以作为一个窗口来放置其他部件。Qt中把没有嵌入到其他部件中的部件称为窗口,一般窗口都有边框和标题栏,就像程序中的widget和label一样。QMainWindow和大量的QDialog子类是最一般的窗口类型。窗口就是没有父部件的部件,所以又称为顶级部件(top-level wid
理解Widget::Widget(QWidget *parent) :QWidget(parent)
m0_63520910的博客
08-26 1116
3 main函数实例化了两个子类实例,child1,child2。child1调用默认构造函数。2 上方代码定义了一个BaseChild类,并继承Base类,同样的,它也定义了两个构造函数,一个默认,一个有整型参数。初始化列表中的Base(val)正是调用了我们Base基类的有参构造函数,而这样的写法就刚好是我们开头代码中的那段。1 上方代码定义了一个基类Base,并且有两个构造函数,一个是默认构造函数,一个是有一个整型参数的构造函数。所以可以类比一下:Widget是调用了QWidget下面的构造函数。..
Qt常用控件——QRadioButton和QCheckBox
最新发布
Dirty_artist的博客
09-09 743
QRadionButton(单选)、QAbstractButton信号介绍、简单点餐页面、QCheckBox(多选)
Widget::Widget(QWidget *parent) : QWidget(parent),ui(new Ui::Widget)
qq_41827665的博客
11-19 5428
#include &lt;QCoreApplication&gt; #include &lt;iostream&gt; using namespace std; class Base { public: Base() :m_num(0){ cout &lt;&lt; "this is Base()" &lt;&lt; endl; cout&lt;&lt;m...
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); } 解释一下上面代码,并告诉我为啥QWidget *parent,相乘是啥意思
07-17
在构造函数中,首先调用了`QWidget(parent)`,这是调用基类`QWidget`的构造函数,并将`parent`作为参数传递给它。这样做是为了确保正确地初始化基类部分。 接着,通过`ui(new Ui::Widget)`创建了一个新的`Ui::...
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 设置UI界面
05-26
在这个构造函数中,我们首先调用了QWidget类的构造函数,将父类指针parent传递进去,然后创建了一个新的Ui::Widget对象ui,并调用了它的setupUi()函数,将UI界面设置到Widget对象上。 具体来说,ui对象是在Widget类...
帮我解释qt里面的代码含义#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; }
07-12
这段代码是一个使用Qt框架的widget类的构造函数和析构函数。让我逐行解释一下: - `#include "widget.h"` 和 `#include "ui_widget.h"` 是包含了两个头文件,其中 `widget.h` 是自定义的widget类的头文件,`ui_...
Widget::Widget(QWidget* parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // setWindowTitle("");
06-10
Widget 类是从 QWidget 类继承而来的,其构造函数的参数是一个指向 QWidget 的指针 parent。在构造函数中,首先调用了 QWidget 类的构造函数,并将 parent 作为参数传递进去。接着,创建了一个名为 ui 的指向类 Ui::...
Widget::Widget(QWidget *parent) :QWidget(parent)解析
持剑的龙套的博客
02-13 402
MyLabel::MyLabel(QWidget *parent) : QWidget {parent}解析
【QT】如何理解Widget::Widget(QWidget *parent) :QWidget(parent)
zsyyugong的博客
10-30 2475
一个没有父窗口部件的窗口部件一直是顶级窗口部件。非顶级窗口部件是父窗口的子部件。QWidget构造函数有两个参数:QWidget *parent = 0,Qt::WindowFlags f = 0。parent即父窗口,默认为0,即没有父窗口,是顶级窗口,如果指定parent值则当前窗体将会是一个子部件。
QWidget *parent
qq_38517015的博客
09-18 2508
Qt,写构造函数时有个参数是QWidget parent 当传入一个非空指针parent时,表示这个新的窗口为parent所指窗口的子窗口,那么当父窗口被删除时,子窗口也会自动的被删除; 而传入一个空指针parent=0时,表示这个新窗口时独立的,不是任何窗口的子窗口 参考链接:https://www.cnblogs.com/findumars/p/9231742.html https://www...
QT_小知识| 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)
Lee1989
10-08 1380
此处“Widget::Widget(QWidget *parent) ”定义派生类的构造函数;:QWidget(parent)基类的有参构造函数。由于构造函数是指在创建一个新对象的时候,自动执行,因此通常用来实现一些默认操作。这样派生类就具备了基类的功能基类QlineEdit的功能。在.h文件中有继承关系。
QT学习记录(001):如何理解派生类构造函数写法Widget::Widget(QWidget *parent) :QWidget(parent)
huihui196的博客
01-11 2822
QT学习:如何理解派生类构造函数写法Widget::Widget(QWidget *parent) :QWidget(parent)
理解Widget::Widget(QWidget *parent) :QWidget(parent)同C++ 基类和派生类的构造函数
小道士写程序
06-20 670
派生类不能继承基类的构造函数;派生类执行构造函数时,会调用基类的构造函数,一般来说,需要在派生类构造函数中指明基类构造函数,且必须在函数头指明,例如://基类Peopleprotected:int m_age;public://派生类Studentprivate:public://People(name, age)就是调用基类的构造函数cout
QWidget父子事件传递源码剖析
kupePoem的专栏
12-12 1495
四、Qt中父子事件传递 如果子widget没有accept或ignore该事件,则该事件会被传递给其父窗口。那么:对于一个继承而来的类,只要我们重写实现了其各个事件处理函数,则对应的事件肯定无法传递给其父widget! 哪怕重写的该事件处理函数的函数体为空!如果是标准的控件对象,则其肯定没重写各个事件处理函数。那消息能不能传递到父widget中,则取决于中途有没有使用事件过滤器等将该信号拦截下来了。 class Mywidget:QWidget { .... virtual void...
QWidgetparentWidget、window、nativeParentWidget区别与理解
danshiming的博客
05-21 2667
QWidgetparentWidget、window、nativeParentWidget区别与理解
写文章

热门文章

  • 步进电机定子相数:单相/两相/三相/四相/五相结构工作原理 42957
  • 热敏电阻和温度转换公式和程序 27186
  • Qt数据库 QSqlTableModel实例操作 18777
  • 关于迟滞比较器的解释( 18320
  • 晶振负载电容计算公式和说明 11094

分类专栏

  • 计算机基础 1篇
  • ZYNQ 1篇
  • c/c++ 27篇
  • STM32 7篇
  • 免费分享
  • 硬件设计 5篇
  • Linux系统 16篇
  • C# 1篇
  • QT 23篇
  • android 1篇
  • python 4篇
  • QML 1篇
  • 服务器 1篇
  • 前端 1篇
  • 其他 2篇
  • 设计模式 2篇
  • 数学 2篇

最新评论

  • 步进电机定子相数:单相/两相/三相/四相/五相结构工作原理

    UltraTao: 引用「转子不采用永久磁铁的步进电机(VR型或反应式或变磁阻式)很早就在三相步进电机上得到应用。1986年日」 这一段凑字数呢表情包

  • 小数在内存中的存储表示

    Clutch_King: 0 10000110 01011011100000000000000写错了吧,应该是 0 10000110 101011011101 000000000000少写个1

  • qt使用模板template,报错无法解析外部符号

    2201_75925810: 我感觉我有颠勺, c++基础我已经学完了, 把这忘了

  • PCB布线规则图解及PCB布线参考因素解析

    平淡日子里的刺823: 楼主可以讲解一下不能平行走线的原理吗

  • 调用函数时,栈的变化

    Wsyoneself: 好的,感谢,但如果实际操作地址来说,应该是有影响的

大家在看

  • 2024最新最全【大模型学习路线规划】零基础入门到精通!,大模型学习干货分享,总结的太详细了
  • 渗透测试(信息收集篇)
  • 大学生HTML期末大作业——HTML+CSS+JavaScript影视网站(tiger) 1619
  • 虚拟机安装、搭建和配置FTP服务 936
  • 中国最好大学排名(Python-IDLE)代码+详细解读 99

最新文章

  • 解决QT Fault tolerant heap shim问题
  • 进程同步机制
  • QT离线安装包下载
2020年6篇
2019年36篇
2018年29篇
2017年24篇
2016年1篇
2015年4篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家北京超市商场美陈订购柳州玻璃钢雕塑供应商玻璃钢人物雕塑怎么作玻璃钢农耕雕塑四川季节性商场美陈销售企业河南室内玻璃钢雕塑设计清远售卖玻璃钢雕塑官渡区定做玻璃钢雕塑厂家玻璃钢雕塑公司南京乐山玻璃钢十二生肖雕塑合肥大手玻璃钢铸铜雕塑厂罗湖玻璃钢雕塑制品玻璃钢花盆在哪儿买便宜苏州商场美陈制造永州玻璃钢南瓜屋雕塑开业商场美陈供应广东玻璃钢透光雕塑定做双层玻璃钢花盆大口的玻璃钢卡通雕塑修补视频吉林玻璃钢鹿雕塑定制大型玻璃钢雕塑摆件有哪些定西玻璃钢雕塑公司西安玻璃钢雕塑模型厂家盐田玻璃钢雕塑厂家现代玻璃钢雕塑包括哪些昆明景区玻璃钢雕塑价格福建玻璃钢海豚雕塑价格长沙商场美陈雕塑厂家湘潭雕塑玻璃钢北京玻璃钢雕塑摆件市场报价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化