02.QT 사용자 정의 객체 작성, 객체 트리

4097 단어 QT
Qdebug 사용 방법
#include   //     
...
...
MyWidget::~MyWidget()
{
    qDebug() << "MyWidget   " ;  //     
}

QWidget은 화면에 표시될 수 있는 모든 구성 요소의 부모 클래스입니다. QWidget은 QObject에서 계승됩니다. QObject 대상을 만들 때 부모 대상을 제공할 수 있습니다. 우리가 만든 이 QObject 대상은 부모 대상의children () 목록에 자동으로 추가됩니다.
Qt는 개체 트리 개념을 도입하여 메모리 문제를 어느 정도 해결했다.하나의 QObject 대상이 더미 위에서 만들어질 때, Qt는 동시에 대상 트리를 만들 것입니다.그러나 객체 트리의 객체 순서는 정의되지 않습니다.즉, 객체를 제거하는 순서도 정의되지 않았습니다.모든 대상 트리에 있는 QObject 대상 delete가 있을 때, 이 대상에parent가 있으면,parent의children () 목록에서 자동으로 삭제합니다.만약 아이가 있다면, 자동으로 모든 아이를 delete합니다.Qt는 QObject가 없으면 두 번 delete될 것을 보증합니다. 이것은 분석 순서에 의해 결정됩니다.
대상 트리: 모든 new에서 나온 대상은 방출하지 않아도 됩니다. 왜냐하면 children표의 대상은 창이 닫힌 후에 자동으로 방출됩니다.
MyWidget.cpp에서 사용자 정의 My Button 대상을 만듭니다. My Button의 대상은 My Widget에 붙어 있습니다. My Widget을 분석할 때 childen의 My Button을 먼저 삭제합니다. 그러나 인쇄의 순서는 이렇지 않습니다. 부류의 분석 함수를 먼저 호출하기 때문에 부류에 대상자가 있는 것을 발견하고 부류의 대상을 먼저 분석합니다. 사실은 부류의 대상을 먼저 분석합니다. 부류의 부류는 함수를 먼저 호출했을 뿐입니다.주의해야 할 것은 자류의 대상은 반드시 먼저 부류의 대상에 의존해야 한다는 것이다.
//     
MyButton * myBtn = new MyButton;
myBtn->setText("    ");
myBtn->setParent(this);//  this         MyButton  

main.cpp
#include "mywidget.h"
#include //   

//     argc         argv       
int main(int argc, char *argv[])
{
    //       a QT             
    QApplication a(argc, argv);
    //  MyWidget w  MyWidget    QWidget
    MyWidget w;
    //QT         ,    show()       
    w.show();

    //     a.exec()        
    return a.exec();
}

mywidget.h
#ifndef MYWIDGET_H//          
#define MYWIDGET_H

#include //    

//     MyWidget,   QWidget
class MyWidget : public QWidget
{
    Q_OBJECT  //Q_OBJECT             QT        

public:
    MyWidget(QWidget *parent = 0);  //    ,     0
    ~MyWidget();   //  
};

#endif // MYWIDGET_H              

mywidget.cpp
#include "mywidget.h"
#include 
#include "mybutton.h"
#include 

//    ,   
//  :           ,          
//  /  :                   
//   :
//   ctrl+R
//   ctrl+B
//   ctrl+F
//     F1
//     ctrl+I
//     ctrl + shift+       
//    .h   .cpp      F4


MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)  //     ,       ,      
{
    //          
    QPushButton * btn = new QPushButton;
    //btn->show();//show        ,    MyWidget     ,     MyWidget  
    //    
    btn->setParent(this);
    //    
    btn->setText("button1");
    //    
    btn->move(100,100);
    //     
    QPushButton * btn2 = new QPushButton("button2",this);
    btn2->move(200,300);
    //      
    btn2->resize(20,30);
    //        ,        
    this->resize(600,400);
    //      
    this->setWindowTitle("first programe");
    //      
    this->setFixedSize(600,400);

    //     
    MyButton * myBtn = new MyButton;
    myBtn->setText("    ");
    myBtn->setParent(this);//  this         MyButton  

    //  1:        2:        3:         4:      
    connect(myBtn, &MyButton::clicked,  this, &MyButton::close  );



}

MyWidget::~MyWidget()
{
    qDebug() << "MyWidget   " ;
}

mybutton.h
#ifndef MYBUTTON_H
#define MYBUTTON_H

#include 
#include 

class MyButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = 0);
    ~MyButton();

signals:

public slots:
};

#endif // MYBUTTON_H

mybutton.cpp  
#include "mybutton.h"
#include 

MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{

}

MyButton::~MyButton()
{
    qDebug() << "MyButton   ";  //      
}


출력:
Starting D:\Code\Code_for_qt\01qt_first\debug\01qt_first.exe...
MyWidget   
MyButton   
D:\Code\Code_for_qt\01qt_first\debug\01qt_first.exe exited with code 0

좋은 웹페이지 즐겨찾기