前言:
简单了解了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