QT基本介绍、父子窗口和内存托管、信号和槽函数
1.关于QT
1.1QT基本介绍
Qt是1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开GUI(Graphical User Interface)程序,也可用于开发非GUI程序,比如控制台程序。与windows上面的MFC是同一类东西。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能,并且Qt很容易扩展。
1.2第一个QT程序
选择Application中的QT widges Application
会得到如下文件:其中,test.pro是编译文件,QT使用qmake编译,跨平台且简单;widge.h是窗口的头文件,用来定义窗口的一些申明;widget.app用来实现窗口里的一些具体内容
我们看看.pro中的文件:其中QT +=core gui,表示这个项目调用了QT GUI的一些库;TARGET表示该项目的名字;TEMPLATE表示项目编译完成后,得到的可执行文件是app;CONFIG表示一些配置;SOURCES和HEADERS分别表示源文件和头文件。
编译后,得到如下运行结果:
2.父子窗口和内存托管机制
一般来说 main.cpp不会写太多的东西
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //创建一个app
Widget w; //创建一个顶级窗口
w.show(); //窗口显示
return a.exec();
}
细节主要在widget.cpp中实现
#include "widget.h"
#include <QLabel> //创建标签包含的头文件
#include <QLineEdit> //使用行编辑器包含的头文件
#include <QPushButton> //创建按钮时要包含的头文件
#include <QDebug> //qDebug类似于cout,不过比cout功能更强大,
//由于QT中自定义了一些数据类型如Qstring,就只能用qDebug不能用cout输出。
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this->setWindowTitle("hello-xiaozhikang"); //给窗口设置名字
QLabel *label=new QLabel(this); //创建一个标签
label->setText("it is a label"); //给标签设置名字
_edit=new QLineEdit("hello",this); //设置一个行编辑器,
//其中_edit是calss widget文件中定义private:QLineEdit * _edit;
_edit->move(100,0); //行编辑器移动
QPushButton * pb=new QPushButton("printf" ,this); //设置一个标签
pb->move(0,100); //标签移动
}
Widget::~Widget()
{
this->deleteLater();
}
结果如下:
为什么按钮、标签、行编辑器都能放在hello-xiaozhikang这个窗口中呢,因为这个this代表hello-xiaozhikang,按钮都以this为父窗口;这里hello-xiaozhikang是顶级窗口,也就是app的最初界面。
当按钮等以hello-xiaozhikang为父窗口时,new出来的按钮就不用自己销毁,hello-xiaozhikang这个对象销毁时他的子窗口都会自动销毁。
信号与槽函数
1.简单的信号与槽函数
在C++中,两个对象要通信是比较困难的,QT用信号和槽函数实现了对象间的通信,十分方便。在两个对象进行通信的过程中,信号可以看成是对象A(发送端)向对象B(接收端)发送一个信号,槽函数可以看成对象B在接收到信号之后作出反应的函数。
值得一提的是,信号不是函数,只能定义不能实现,但是可以带参数
槽函数可以理解为普通的函数
当我们在头文件中加入如下定义:
public slots:
void printfslot();
源文件中加入如下代码:
当我们点击printf时,会在输出窗口输出行编辑器里的内容:
connect(pb,SIGNAL(clicked()),this,SLOT(printfslot()));
//这里,conne用来连接信号和槽函数。pb表示按钮,clicked表示单击,是系统自带的信号,
//this表示顶级窗口即hello-xiaozhikang
//printfslot表示自己定义的槽函数,用来输出行编辑器里的内容。
//如此一来,当鼠标单击时,pb这个对象向hello-xiaozhikang发送一个信号,hello-xiaozhikang接受到后,执行printfslot函数。
总结
这篇文章介绍了QT的一些基本知识,如qmake一些基本知识;父子窗口、信号与槽函数;按钮、行编辑器、标签的实现。