【QT(二)】—— 初识QT

前言

简单了解了QT是什么,以及QT的基本使用,现在来使用QT写一个简单的hello qt项目

基本控件

文本框

1. form图形化界面创建

首先创建一个空项目,然后进入编辑界面,打开from.ui文件

在左侧的控件在选择Label(文本框),拖拽到程序界面,并输入文本。

这样使用图形化界面创建一个hello qt项目就完成了。

运行效果

2. 代码创建文本框对象

除了使用图像化界面来创建,我们还可以通过写代码的方式来创建文本框:

只需要在Widget类构造方法中,创建QLabel对象,即可创建一个文本框。

设置文本框的内容,只需要调用QLabel对象中的成员方法setText即可。

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLabel* ql = new QLabel(this);
    ql->setText("hello qt");
}

这里如果报错找不到头文件,就显示的包含QLabel的头文件QLabel/Qlabel.h

这里在创建QLabel对象时,推荐在堆上创建(在栈上创建会造成控件提前释放);

并且要传递参数this,也就是Widget指针。

在 Qt 中,对象树(Object Tree) 是核心内存管理机制:通过指定控件的父对象(Parent) ,将控件挂载到对象树上,当父对象被销毁时,会自动递归销毁所有子对象,无需手动调用 delete,避免内存泄漏。

运行效果

这里使用代码创建的文本框就在整个窗口的左上角;

可以通过QLabel对象调用move方法,来设置控件的位置。

输入框

除了使用文本框,我们还可以创建一个输入框控价,里面的内容设置成hello qt

1. form图形化界面创建

打开from.ui文件,在左侧控件栏中找到Line EditText EditLine Edit表示单行输入框、Text Edit表示多行输入框)

这样保存,然后就完成了输入框的创建。

运行效果

2. 代码创建输入框对象

当然,我们也可以通过代码来创建一个输入框,并设置文本框内初始内容;

输入框空间对应的类是QLineEditQTextEdit

所以只需在Widget构造函数中,构建QLineEdit对象,并将其挂到对象树上即可;调用其setText成员方法即可设置输入框中的初始内容。

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLineEdit* qle = new QLineEdit(this);
    qle->setText("hello qt");
}

还是一样,如果保存找不到QLineEdit,就显示包含头文件(QLineEdit)即可。

运行效果

按钮

1. 图形化界面创建

打开form.ui文件,在左侧找到Push Button按钮空间,拖拽到右侧,然后双击输入文本即可。

运行效果

2. 代码创建按钮对象

按钮控件所对应的类是QPushButton

我们只需在Widget类构造函数中创建QPushButton对象并将其挂到对象树上,创建按钮控件就完成了。

当然也可以调用setText成员方法,设置文本内容。

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton* qpb = new QPushButton(this);
    qpb->setText("hello qt");
}

运行效果

这里是创建了一个按钮控件,程序运行起来会发现,确实存在一个按钮,但是鼠标点击这个按钮没有反应。(没有对鼠标点击进行处理)

可以调用内置函数connect捕捉点击按钮产生的信号,并调用槽函数进行处理。

对象树

QT 当中,存在一种内存管理机制(对象树 )其核心目的是简化父子对象的生命周期管理,自动释放资源,避免内存泄漏。

QT当中,所有继承于QObject的类都支持这种父子关系

像这里创建项目指定的Widget类,它的父类是QWidget;而QWidget的父类是QObject

像这里的QPushButtonQLineEditQLabel都是从顶层基类QObject继承来的。

QPushButton :直接父类是QAbstractButton,而QAbstractButton继承自QWidget,最终追溯到顶层基类QObject

QLineEdit :直接父类是QWidget,顶层基类为QObject

QLabel :直接父类是QFrameQFrame继承自QWidget,顶层基类为QObject

所以,在创建对象时,指定其父节点,将该对象挂到对象树上,我们就无需再关系释放问题,它会自动被释放。

坐标系

在使用图形化界面创建控件时,我们可以拖拽到任意位置;而使用代码创建控件时,创建出来的控件一直都在窗口的左上角。

我们可以调用move来设置控件的位置,但是要注意 :这里的单位是 像素

这里就以按钮为例,设置一下控件的位置。

1. 设置图形化界面创建的控件

要通过代码来控制图形化界面创建的控件,就要使用到成员变量Ui::Widget *ui,使用图形化界面创建的控件都在ui指向的对象当中。

例如,这里使用图形化界面创建的按钮,就可以直接使用ui调用该控件成员方法来设置控件文本内容、位置等等。

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton->setText("hello");
    ui->pushButton->move(100,200);
}

这里控件的名称,可以在form.ui中设置(打开form.ui文件,点击控件,在界面的右下角有控件的相关属性)

运行效果

2. 设置代码创建的控件对象

设置创建的控件对象就简单多了,直接调用控件对象的成员方法即可。

cpp 复制代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QPushButton* qpb = new QPushButton(this);
    qpb->setText("hello qt");
    qpb->move(200,300);
}

运行效果

这里,设置控件 对象的位置是相对于其父类的,也就是相对于整个窗口。

而如果设置Widget类的位置,那就是相对于整个显示器屏幕了。

本篇文章到这里就结束了,感谢支持

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

相关推荐
Scott9999HH3 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海4 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨5 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区7 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大8 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai8 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜8 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa8 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio