【Qt桌面应用开发】Qt按键小程序

举报
xcc-2022 发表于 2022/11/28 18:52:51 2022/11/28
【摘要】 2、Qt 按键小程序 2.1 按钮的创建和父子关系创建一个新的项目文件Qpushbutton,并设置为活动项目,设置为活动项目意思是执行哪个项目#include <QPushButton> //添加按钮 QPushButton btu; btu.setText("按钮1"); //将按钮显示出来 btu.show();按钮独立显示一个窗口,是因为默认情...

2、Qt 按键小程序

2.1 按钮的创建和父子关系

创建一个新的项目文件Qpushbutton,并设置为活动项目,设置为活动项目意思是执行哪个项目

image-20221024085411915
#include <QPushButton>
    //添加按钮
    QPushButton btu;
    btu.setText("按钮1");
    //将按钮显示出来
    btu.show();

按钮独立显示一个窗口,是因为默认情况下没有建立父子关系,显示的是顶层窗口

上面代码中,一个按钮其实就是一个QPushButton类的对象,如果只是创建出对象,是无法显示到窗口中的,所以我们需要依赖一个父窗口,也就是指定一个父亲,利用setParent函数或者按钮创建的时候通过构造函数传参,此时我们称两个窗口建立了父子关系。在有父窗口的情况下,窗口调用show会显示在父窗口中,如果没有父窗口,那么窗口调用show显示的会是一个顶层的窗口(顶层窗口是能够在任务栏中找到的,不依赖于任何一个窗口而独立存在)(按钮也是继承于QWidget,也属于窗口)。

如果想设置按钮上显示的文字可以用setText,移动按钮位置用move。

对于窗口而言,我们可以修改左上角窗口的标题setWindowTitle,重新指定窗口大小:resize,或者设置固定的窗口大小setFixedSize。

image-20221024085954011
//建立父子关系
    //1.setparent函数
    QPushButton btn;
    btn.setText("按钮1");
    btn.setParent(&w);

image-20221024091805906

再添加一个按钮

//2.构造函数传参
    QPushButton btn2("按钮2",&w);
    btn2.move(100,100);
image-20221024091540462

按钮2覆盖了按钮1,移动(move)按钮btn2.move(100,100);

image-20221024092001855
 //设置窗口按键大小
    btn2.resize(300,300);
    QPushButton btn3("按钮3",&btn2);
    //设置窗口标题
    w.setWindowTitle("第一个项目");
    //限制窗口大小
    w.setFixedSize(600,400);
image-20221024100500578
 //第二种创建
    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

image-20221024101633127

对于嵌套窗口,其坐标是相对于父窗口来说的。顶层窗口的父窗口就是屏幕。

2.3 Qt常用API函数

	move 移动窗口到父窗口某个坐标
	resize 重新设置窗口的大小
	setFixedSize 设置窗口的固定大小
	setWindowTitle 设置窗口标题
	setGeometry 同时设置窗口位置和大小,相当于move和resize的结合体

2.4 对象树模型

02_Qt_ObjectsTree

QObject是Qt里面绝大部分类的根类

QObject不佳而传统对象之间是以对象树的形式组织起来的

  1. 当两个Object(或父类)的对象建立了==父子关系==的时候。子对象就会加入到父对象的一个成员变量叫children(孩子)的list列表中。
  2. 当对对象析构的时候,这个列表中的所有对象也会被析构。(之u一,这里是说的父对象和子对象,不要理解成父类和子类)
//局部变量在函数退出的时候会自动释放
    QPushButton btn("按钮1",this);
    btn.show();

image-20221024134304110

发现按键窗口一闪而过,生命周期只在函数执行到结束就消亡了,所以需要提高生命周期:

//解决 让按钮的生命周期长一点
//1 .static
//2. 类成员变量
//3. new 一个,动态内存分配

 QPushButton *btn1 = new QPushButton("按钮1",this);
    //在new分配内存了之后需要释放,但这里不需要delete

image-20221024135202670

==Qwindget==是能够再屏幕上显示的一切组件的父类

我们再自己创建一个类打印验证一下,再继承一个按钮类,在子类的析构函数里打印信息

在本类中新建一个MyPushButton C++文件

#include "mypushbutton.h"
#include<QDebug>
MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
{

}
MyPushButton::~MyPushButton()
{
    qDebug()<<"MyPushButton Destory";
}

在qt中我们使用QDebug这么一个函数代替cout会更合适,需包含头文件,还有string用Qstring一样

image-20221024140921113

代表关闭窗口析构成功了

概念:各个窗口对象通过建立父子关系构造的一个关系树
	内存管理:
		父对象释放的时候会自动释放各个子对象(使用children列表)
	
	以后基本都是用new的方式来创建窗口对象
	注意点:
		1 父对象能够被释放
		2 父对象、子对象,直接或者间接继承自QObject
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。