QT窗口组件的父子关系

部分图文参考狄泰软件学院相关内容

1.QT对象间可以存在父子关系

(1)每一个对象都保存有它所有子对象的指针

(2)每一个对象都有一个指向其父对象的指针

2.当指定QT对象的父对象时

(1)其父对象会在对象链表中加入该对象的指针

(2)该对象会保存指向父对象的指针

3.当QT对象被销毁时

(1)将自己父对象的Chidrea_ List移除

(2)将自己的Children List中所有对象销毁

(3)利用QT对象间的父子关系可以构成对象树

(4)删除书中的节点会导致对应子树被销毁

注意:使用QT开发时,不仅要时刻注意内存泄漏的问题,还要时刻关注对象是否可能被多次销毁的问题

4.当使用布局管理器时

(1)任何容器类的组件都可以指定布局管理器

(2)同意个布局管理器中的举荐拥有相同的父组件

(3)设置布局管理器的同时,隐式的指定了父子关系

在QT的开发中,在一个容器类中要使用别的组件,有两种方法:

1、在容器类中包含有这些子组件类成员变量,如:

class Widget : public QWidget
{
Q_OBJECT

private:
QLabel preBtn;
QPushButton nextBtn;
QLabel fLbl1;
QLabel fLbl2;
QLabel fLbl3;
QLabel fLbl4;
QLineEdit sLineEdit;
QPushButton tPushBtn1;
QPushButton tPushBtn2;
QStackedLayout sLayout;

void initControl();
QWidget* get1stPage();
QWidget* get2ndPage();
QWidget* get3rdPage();
private slots:
void onPreBtnClicked();
void onNextBtnClicked();
public:
Widget(QWidget* parent = 0);
~Widget();
};

2.也可以在容器类中不包含这些子组件成员变量,在一些函数中(如构造函数或其他它成员函数)进行创建(大多为堆对象)

class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
};

Widget::Widget(QWidget *parent) : QWidget(parent, Qt::WindowCloseButtonHint)
{
QLabel* nameLbl = new QLabel("Name:");
QLabel* mailLbl = new QLabel("Email:");
QLabel* addrLbl = new QLabel("Address:");
QLineEdit* nameEdit = new QLineEdit();
QLineEdit* mailEdit = new QLineEdit();
QLineEdit* addrEdit = new QLineEdit();
QGridLayout* layout = new QGridLayout();

layout->setSpacing(10);
layout->addWidget(nameLbl, 0, 0);
layout->addWidget(nameEdit, 0, 1);
layout->addWidget(mailLbl, 1, 0);
layout->addWidget(mailEdit, 1, 1);
layout->addWidget(addrLbl, 2, 0);
layout->addWidget(addrEdit,2, 1);
layout->setColumnStretch(0, 1);
layout->setColumnStretch(1, 4);

setLayout(layout);
setWindowTitle("FTP");
}

自己考虑了下,其实这两种方式都可以,有些组件也可以不以类成员的方式出现,因为只要确定了每个组件的父组件,对象间的父子关系明确,在Widget对象最终析构的时候,子对象(组件)也会被析构(销毁),并不会有内存方面的问题。

一般来说  new来创建子组件更好一些,因为 new 的时候才会构造子组件。比较清晰。

      如果用成员的方式  那么构造子组件的顺相当于就固定了,一开始就会构造所有子组件,  要是子组件之间存在父子关系,后面还需要改变父子关系的话,就容易出错或遗漏。

 

原文地址:https://www.cnblogs.com/lh03061238/p/12326556.html

时间: 2024-10-05 23:58:39

QT窗口组件的父子关系的相关文章

QT之对象父子关系

QT对象间可以存在父子关系: 1.每一个对象都保存有它所有子对象的指针 2.每一个对象都有一个指向其父对象的指针 其关系如下图所示: 当指定QT对象的父对象时,其父对象会在子对象链中表中会加入该对象的指针,该对象会保存指向其父对象的指针.我们在QT中创建了3个 QObject 对象,我们让 c1.c2 的父对象指向 p,那么我们打印 c1 和 c2 的地址以及 p 的子对象链表里的地址.如下所示:打印的结果如下:事实证明了确实如我们所想的那样,QT对象间可以存在父子关系.那么当Qt对象被销毁时,

第16课 Qt对象间的父子关系

1. Qt对象间的关系 (1)Qt对象间可以存在父子关系 ①每一个对象都保存有它所有子对象的指针 ②每一个对象都有一个指向其父对象的指针 (2)当指定Qt对象的父对象时 ①其父对象会在子对象链表中加入该对象的指针 ②该对象会保存指向其父对象的指针 (3)当Qt对象被销毁时 ①将自己从父对象的Children List移除 ②将自己的Children List中的所有对象销毁 ▲使用Qt开发时,不仅要时刻注意内存泄露的问题,还要时刻关注对象是否可能被多次销毁的问题. [编程实验]对象间的父子关系

QObject提供了QMetaObject元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化

元类信息(相当于RTTI和反射),信号与连接,父子关系,调试信息,属性,事件,继承关系,窗口类型,线程属性,时间器,对象名称,国际化其中元类又提供了:classInfo,className,构造函数,多重祖先元类,method, property, Enumerator, Signal, Slot等等 http://doc.qt.io/qt-5/qobject.html http://doc.qt.io/qt-5/qmetaobject.html 我感觉Qt的出现,除了提供GUI以外,主要就是提

7.QT-Qt对象间的父子关系

Qt对象之间可以存在父子关系 继承于QObject类或者其子类的对象,都称为Qt对象 当指定Qt对象的父对象时 需要通过setParent()成员函数来设置对象间的父子关系 子对象将会把自己的指针地址保存在父对象的children List链表里(因为父对象可以拥有多个子对象) 子对象内部会有一个指向其父对象的指针,可以通过parent()成员函数查看 代码试验 需要用到的函数: void QObject::setParent ( QObject * parent ); //设置为parent对

将两个不同进程的窗口设置为父子关系

今天用WPF程序给一个第三方程序做插件,该程序支持通过菜单扩展的方式集成第三方程序,看起来像是弹出一个对话框. 但是,由于新写的WPF程序和原程序是没有任何关系的,一旦原程序重新获取焦点时,新弹出的WPF程序窗口就会切换到后台,看起来就不像子窗口了.看了一下之前的人们的做法,大多是将新蹦出来的窗口设置为TopMost,但这样就又引入了改窗口不能切换到后台隐藏的问题. 在网上搜了一下,找到了如下解决方法:http://stackoverflow.com/questions/2599053/how-

Logstash 父子关系 配置

最近在使用Lostash的过程中遇到了一个问题:在一个log文件里包含两类数据,而且两类数据之间存在父子关系,那如何使用lostash的configuration实现这个需求呢 思路: 首先定义父事件的pattern,因为子事件不匹配父pattern,所以logstash会自动为子事件添加_grokparesefailure 标签.通过该标签即可知道当前事件是父事件还是子事件 使用filter->ruby生成document_id,并把它放到ruby全局变量中 ,这样子事件就可以访问到父事件的d

猫猫学iOS 之控制器view显示中view的父子关系及controller的父子关系_解决屏幕旋转不能传递事件问题

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果 二:项目代码 这个Demo用的几个控制器分别画了不通的xib,随便拖拽了几个空间,主要是几个按钮的切换,主要代码展示下: // // NYViewController.m // 控制器的view的显示 // // Created by apple on 14-10-10. // Copyright (c) 2014年 heima. All rights

NHibernate之旅(9):探索父子关系(一对多关系)

本节内容 引入 NHibernate中的集合类型 建立父子关系 父子关联映射 结语 引入 通过前几篇文章的介绍,基本上了解了NHibernate,但是在NHibernate中映射关系是NHibernate中的亮点,也是最难掌握的技术.从这篇开始学习这些东西,我将图文结合来说明这里奥秘的知识. 前几篇,我们的例子只使用了一个简单的Customer对象.但是在客户/订单/产品的经典组合中,他们的关系非常复杂?让我们先回顾在第二篇中建立的数据模型. 在图上,我已经清晰的标注了表之间的关系,首先分析Cu

创建骨骼的那些事-如何快速的创建骨骼的父子关系

我使用的2016的max版本.觉得这个版本的界面我还是很喜欢的.很好分类. 在3dmax中,我们在创建骨骼的父子关系时,在视图中选择时经常会很难选中要建立父子关系的两个骨骼,经常会选中到身体的部位.所以我们完全可以在名称栏(对max的各个视图的名称不太记得了,暂且就叫做名称栏吧)中将子骨骼的名称拖入到父骨骼的名称里面,这样就可以快速的建立者两者的父子关系了.方便快捷. 刚开始我是这样想的.把body锁定到不被选的状态,但是我忘记怎么锁定物体了.所以......