【Qt桌面应用开发】Qt按键小程序
2、Qt 按键小程序
2.1 按钮的创建和父子关系
创建一个新的项目文件Qpushbutton,并设置为活动项目,设置为活动项目意思是执行哪个项目
#include <QPushButton>
//添加按钮
QPushButton btu;
btu.setText("按钮1");
//将按钮显示出来
btu.show();
按钮独立显示一个窗口,是因为默认情况下没有建立父子关系,显示的是顶层窗口
上面代码中,一个按钮其实就是一个QPushButton类的对象,如果只是创建出对象,是无法显示到窗口中的,所以我们需要依赖一个父窗口,也就是指定一个父亲,利用setParent函数或者按钮创建的时候通过构造函数传参,此时我们称两个窗口建立了父子关系。在有父窗口的情况下,窗口调用show会显示在父窗口中,如果没有父窗口,那么窗口调用show显示的会是一个顶层的窗口(顶层窗口是能够在任务栏中找到的,不依赖于任何一个窗口而独立存在)(按钮也是继承于QWidget,也属于窗口)。
如果想设置按钮上显示的文字可以用setText,移动按钮位置用move。
对于窗口而言,我们可以修改左上角窗口的标题setWindowTitle,重新指定窗口大小:resize,或者设置固定的窗口大小setFixedSize。
//建立父子关系
//1.setparent函数
QPushButton btn;
btn.setText("按钮1");
btn.setParent(&w);
再添加一个按钮
//2.构造函数传参
QPushButton btn2("按钮2",&w);
btn2.move(100,100);
按钮2覆盖了按钮1,移动(move)按钮btn2.move(100,100);
//设置窗口按键大小
btn2.resize(300,300);
QPushButton btn3("按钮3",&btn2);
//设置窗口标题
w.setWindowTitle("第一个项目");
//限制窗口大小
w.setFixedSize(600,400);
//第二种创建
QPushButton * btn2 = new QPushButton("按键1",this);
//重新指定窗口大小
this->resize(600,400);
//设置窗口标题
this->setWindowTitle("第一个项目");
//限制窗口大小
this->setFixedSize(600,400);
2.2 Qt窗口坐标体系
是以父窗口的左上角为0,0
以向右的方向为x的正方向
以向下的方向为y的正方向
顶层窗口就是以屏幕左上角为0,0
对于嵌套窗口,其坐标是相对于父窗口来说的。顶层窗口的父窗口就是屏幕。
2.3 Qt常用API函数
move 移动窗口到父窗口某个坐标
resize 重新设置窗口的大小
setFixedSize 设置窗口的固定大小
setWindowTitle 设置窗口标题
setGeometry 同时设置窗口位置和大小,相当于move和resize的结合体
2.4 对象树模型
QObject是Qt里面绝大部分类的根类
QObject不佳而传统对象之间是以对象树的形式组织起来的
- 当两个Object(或父类)的对象建立了==父子关系==的时候。子对象就会加入到父对象的一个成员变量叫children(孩子)的list列表中。
- 当对对象析构的时候,这个列表中的所有对象也会被析构。(之u一,这里是说的父对象和子对象,不要理解成父类和子类)
//局部变量在函数退出的时候会自动释放
QPushButton btn("按钮1",this);
btn.show();
发现按键窗口一闪而过,生命周期只在函数执行到结束就消亡了,所以需要提高生命周期:
//解决 让按钮的生命周期长一点
//1 .static
//2. 类成员变量
//3. new 一个,动态内存分配
QPushButton *btn1 = new QPushButton("按钮1",this);
//在new分配内存了之后需要释放,但这里不需要delete
==Qwindget==是能够再屏幕上显示的一切组件的父类
我们再自己创建一个类打印验证一下,再继承一个按钮类,在子类的析构函数里打印信息
在本类中新建一个MyPushButton C++文件
#include "mypushbutton.h"
#include<QDebug>
MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
{
}
MyPushButton::~MyPushButton()
{
qDebug()<<"MyPushButton Destory";
}
在qt中我们使用QDebug这么一个函数代替cout会更合适,需包含头文件,还有string用Qstring一样
代表关闭窗口析构成功了
概念:各个窗口对象通过建立父子关系构造的一个关系树
内存管理:
父对象释放的时候会自动释放各个子对象(使用children列表)
以后基本都是用new的方式来创建窗口对象
注意点:
1 父对象能够被释放
2 父对象、子对象,直接或者间接继承自QObject
- 点赞
- 收藏
- 关注作者
评论(0)