【QT】2_3_1_Qt手动创建一个最简单的Qt应用程序

作者:永恒0852永恒0852发布时间:2017-11-13 20:55
1.一个最简单的Qt应用程序
        1)在欢迎界面电机新建工程,或者在文件菜单下面选择“新建文件或项目”
            1.png
        2)选择其他项目:空项目
            9.png
        3)名称和路径不能有中文,当输入框显示红色,则输入的信息有误。
            3.png
        4)选择编译器
            4.png
        5)点击完成
            5.png
        6)双击打开pro工程文件,添加如图如图代码:
            6.png
        7)右击项目02_TestQt,添加新文件
            7.png
        8)添加C++源文件
            8.png
        9)命名为main.cpp
            9.png
        10)点击完成,项目创建完了
            10.png

            主函数代码:

#include<QApplication> //QT头文件以大写Q开头
#include<QWidget> //窗口基类
int main(int argc,char*argv[])
{
QApplication a(argc,argv); //初始化
QWidget w; //使用窗口基类创建一个窗口对象w
w.show(); //显示窗口

return a.exec(); //主程序循环(阻塞程序执行)
}

        11)编译运行项目,点击项目左边的绿色三角形,运行后,会弹出来一个名为02_TestQt的空白窗口

            11.png

2.项目说明
        1)Qt头文件没有.h后缀
        2)Qt一个类对应一个头文件,类名就是头文件名
        3)QApplication应用程序类
            ①管理图形用户界面应用程序的控制流和主要设置。
            ①是Qt的整个后台管理的命脉它包含主事件循环,在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。
            ①对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。
        4)a.exec() 
程序进入消息循环,等待对用户输入进行响应。这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回。
在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。

3.QPushButton按钮
        1)在上面的窗口添加按钮代码,首先我们需要包含,按钮的头文件:QPushButton。
        2)创建一个按钮对象,并设按钮名称
        3)再使用对象的方法,来显示这个按钮。
        4)代码如下:
            12.png
        5)点击编译并运行,弹出来了三个窗口,其中两个按钮重合在一起,可以使用鼠标拖动他的位置,但是这个时候我们发现,按钮和主窗口是分离的,也就是说,我们这里2个按钮和主窗口是完全独立的三个对象,此时没有任何关系,按钮本身也可以进行最大化和最小化和关闭。
运行结果如下:
            13.png

4.对象模型:在Qt中创建对象的时候会提供一个Parent对象指针,下面来解释这个parent到底是干什么的。
        1)QObject是以对象树的形式组织起来的
            ①当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是 parent,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。
            ②当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!)
        2)QWidget是能够在屏幕上显示的一切组件的父类
            ①QWidget继承自QObject,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件。

            ②当删除父对象,子对象会自动从其父对象列表中删除。

5.指定父对象(和继承没有关系)
        1)上面我们创建的两个按钮,三个对象都是完全独立的窗口,那是因位我们在定义的时候没有指定他显示在那个窗口上。
        2)指定父对象,父对象show的时候会递归调用其所有子对象,让它们都显示出来(不用单个按钮show,但父对象show的必须在按钮设置就绪后显示;指定父对象后,父对象被销毁时会递归销毁其所有的子对象,让内存管理更加的简单。)。
        3)指定父对象的两种方式:
            ①我们使用对象的成员函数setParent,来为按钮指定父对象,我们输入b2.setp时,下面会出现联想功能,后面有显示这个函数的声明,我们看到,括号里面需要接受一个QWidget 类型的指针,也就是父对象。
                14.png
  b2.setParent(&w); //指定父对象
            ①新建一个按钮对象3,也可以直接通过构造函数,来设置按钮的名称和父对象
                  QPushButton b3("构造函数生成的按钮3",&w); //通过构造函数指定
        4)如下,我们指定主窗口w为三个个按钮的父窗口。此时3个按钮还是重叠的(后面会介绍移动位置)
                15.png
        5)修改的代码如下:
                16.png

6.窗口坐标体系
        1)坐标体系以左上角为原点,X向右增加,Y向下增加:
                17.png
        2)对于父窗口(主窗口),坐标系统相对于屏幕(左上角)
            ① 我们使用move方法,设定父窗口的位置:w.move(0,0);
如下图所示主窗口位于屏幕左上角,如下图:
                18.png
        3)子窗口,坐标系统相对于父窗口(左上角)

            ① 我们先设置按钮的位置:

b1.move(0,0);
b2.move(0,100);
b3.move(0,200);
                19.png
            ① 我们调整b3按钮的大小,创建一个按钮b4指定父对象为b3(按钮可以指定任何对象为父窗口)
如下图,此时,b4按钮显示在b3中,此时b4按钮起始坐标也是以b3的坐标系为准。
                20.png

        4)参考代码:

#include<QApplication> //QT头文件以大写Q开头
#include<QWidget> //窗口基类
#include <QPushButton> //按钮头文件

int main(int argc,char*argv[])
{
QApplication a(argc,argv); //初始化
QWidget w; //使用窗口基类创建一个窗口对象w


QPushButton b1("我是b1按钮1"); //创建一个按钮,同时制定按钮内容
b1.setParent(&w); //指定父对象
b1.move(0,0);

QPushButton b2; //先创建按钮
b2.setText("我是b2按钮2"); //设置按钮内容
b2.setParent(&w); //指定父对象
b2.move(0,100);

QPushButton b3("构造函数生成b3的按钮3",&w); //通过构造函数指定
b3.resize(100,100);

QPushButton b4("b4-_^",&b3);

b3.move(0,200);

// w.move(0,0);
w.show(); //只用显示一次窗口
return a.exec(); //主时间循环(阻塞程序执行)
}


7.完整的代码(注意解压后不能有中文路径)

                2_3_1_手动创建一个最简单的Qt应用程序.zip


/*************************************************************
*   温馨提示:
*            为了不影响文章的可读性,本站图片均不自动加水印。
*            除非注明,文章均由"永恒0852"整理发布,欢迎转载。
*            否则转载请注明本文地址:http://www.yongheng0852.com/qt/40.html
**************************************************************/

评论