码迷,mamicode.com
首页 > 其他好文 > 详细

QT--初识

时间:2019-05-31 00:55:02      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:int   head   模块   oid   move   程序   idg   parent   编译选项   

一、组成QT的基本模块

技术图片

二、创建一个简单工程

1、工程结构介绍

.pro 文件

  • QT       += core gui                                    # 包含的模块
    
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets         # 大于Qt4版本 才包含widget模块
    
    TARGET = QMainWindow        # 应用程序名  生成的.exe程序名称
    TEMPLATE = app              # //模板类型    应用程序模板
    
    DEFINES += QT_DEPRECATED_WARNINGS   #定义编译选项。QT_DEPRECATED_WARNINGS表示当Qt的某些功能被标记为过时的,那么编译器会发出警告。
    
    CONFIG += c++11             # 使用c++11的特性
    
    SOURCES += \                #源文件
            main.cpp         mainwindow.cpp
    
    HEADERS += \                # 头文件
            mainwindow.h
    
    FORMS +=         mainwindow.ui       #设计师界面。
    
    # Default rules for deployment.
    qnx: target.path = /tmp/$${TARGET}/bin
    else: unix:!android: target.path = /opt/$${TARGET}/bin
    !isEmpty(target.path): INSTALLS += target

    main.cpp

  • int main(int argc, char *argv[])
    {
        QApplication a(argc, argv); // 应用程序对象  有且仅有一个
        Widget w;       //定义MainWindow窗口对象
        w.show();           //显示窗口
    
        //程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt
        //Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
        return a.exec();    //进行消息循环 阻塞
    }

    Widget.cpp

  • Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        QPushButton *btn1 = new QPushButton("开始",this);  //创建一个按键
        btn1->move(10,60);
        btn1->resize(80,20);
    }
    
    Widget::~Widget()   //析构代码
    {
        delete ui;
    }

2、对象树

Qt中的对象树如下图所示:

技术图片

QObject是以对象树的形式组织起来的:在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!)

QWidget继承自QObject,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件,我们也可以自己删除子对象,它们会自动从其父对象列表中删除。

Qt 引入对象树的概念,在一定程度上解决了内存问题。

任何对象树中的 QObject对象 delete 的时候,如果这个对象有 parent,则自动将其从 parent 的children()列表中删除;如果有孩子,则自动 delete 每一个孩子。Qt 保证没有QObject会被 delete 两次,这是由析构顺序决定的。

局部对象的析构顺序应该按照其创建顺序的相反过程;

 

 

 

 

 

 

 

QT--初识

标签:int   head   模块   oid   move   程序   idg   parent   编译选项   

原文地址:https://www.cnblogs.com/icefree/p/10952811.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!