02.QT 사용자 정의 객체 작성, 객체 트리
4097 단어 QT
#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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간편한 채팅 시스템 - 메시지 전달 서버메시지 전송 서버는 메시지 대기열에서 온 데이터를 받아들여 디코딩, 식별 등을 하고 마지막으로 분류를 나눈다.예를 들어 채팅 시스템은 같은 그룹과 같은 세션의 정보를 같은 그룹 서비스로 전송한다(물론 아직 같은 그룹...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.