【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 Edit、Text Edit(Line Edit表示单行输入框、Text Edit表示多行输入框)

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

运行效果 :

2. 代码创建输入框对象

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

输入框空间对应的类是QLineEdit和QTextEdit。

所以只需在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。

像这里的QPushButton、QLineEdit、QLabel都是从顶层基类QObject继承来的。

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

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

QLabel :直接父类是QFrame,QFrame继承自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

相关推荐
hudd6681 分钟前
JavaEE 初阶 - 多线程(进阶)
java·开发语言·java-ee
小白快快跑哦18 分钟前
python-字符串全解(六):正则表达式-前后相断言
开发语言·python·正则表达式·前后相断言
kimnoic23 分钟前
Python数据分析中正则表达式匹配字符串与常用函数示例详解
开发语言·python
中屹指纹浏览器svip33 分钟前
打开账号环境网页报错,常见原因有哪些?
服务器·开发语言·php·中屹指纹浏览器
朝朝辞暮i42 分钟前
第 01 讲:Python 变量、对象、数据类型与内存引用
开发语言·python
外收内放1 小时前
Python基础语法练习题(69)
开发语言·python
lojox1 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++
iotxiaohu1 小时前
用 cflow 查看 C 函数调用关系
c语言·开发语言·cflow
zhang-ge1 小时前
python包和项目管理器uv在ubuntu下的安装与使用
开发语言·python·uv
扶尔魔ocy1 小时前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行并进行态势标绘(四)
qt·opengl·osg