【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

相关推荐
爱学习的小邓同学1 小时前
C++ --- map/set的使用
开发语言·c++
weixin_421133411 小时前
JShielder
开发语言
MSTcheng.1 小时前
【C++进阶】继承(下)——挖掘继承深处的奥秘!
开发语言·c++
RisunJan1 小时前
【HarmonyOS】鸿蒙开发语言的选择
开发语言·华为·harmonyos
学困昇1 小时前
Linux基础开发工具(上):从包管理到“进度条”项目实战,掌握 yum/vim/gcc 核心工具
linux·运维·开发语言·数据结构·c++·vim
雨落在了我的手上1 小时前
C语言入门(二十五):自定义类型:结构体
c语言·开发语言
Yan-英杰1 小时前
openEuler 25.09 VM虚拟机实测:性能与安全双维度测评
服务器·开发语言·科技·ai·大模型
兩尛1 小时前
HJ52 计算字符串的编辑距离
java·开发语言·算法
武子康1 小时前
Java-183 OSS 上传实战:Java 原生与 Spring Boot 集成
java·开发语言·spring boot·分布式·spring·阿里云·oss