在学习qT之前,大家一定要清楚,qT版本4和版本5不兼容。我学的是qT5,使用的工具为QT creator。写这个博客主要是为了整理学习时的一些知识。大家学习转到http://www.qter.org。
1、创建窗口。
#include<QApplication>
#include<QLAbel>
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
QLabel label("Hello QT!!");
label.show();
app.exec();
}
QApplication,QLAbel位于widgets模块中。需要在.pro文件中QT+=widgets。(即window gadget(窗口控件))
运行时会产生一个内容为:"Hello Qt!!"的窗口。
QLabel label("Hello QT!!");
产生一个内容"Hello QT!!"的对象。
label.show();
将窗口展示。
app.exec();
循环事件。相当于while(true)即无限循环。
因为创建的是控制台应用,所以会有黑框。
QLabel *label=new QLabel("Hello QT");
label->show();
如果写成这样就会存在内存泄漏的风险,上面的代码,会在程序结束是自动调用析构函数,销毁label对象,但如果使用new就需要自己释放申请的空间。但这个事件是一个循环的事件,所以在销毁的时机不好判断。所以我们要尽量避免使用这种代码。
2、信号和槽
信号和槽类似于设计模式中的“观察者模式”,但它的实现机制并不是经典的设计模式实现的方法。
简单来说“信号和槽”,即当触发某个事件,该事件会产生一个信号,而这个信号会自动去触发和它绑定的槽函数。所以我们经常使用的绑定函数为:
connect(sender,signal,receiver,slot);
四个参数的依次为意义为:sender:发出信号的对象,signal:发送对象发出的信号,receiver:接收信号的对象,slot:处理的函数。而其中第三个参数可以省略,若省略,默认为this。(即信号的发出对象--第一个参数)
#include<QApplication>
#include<QPushButton>
#include<QDebug>
int main(int argc,char* argv[])
{
QApplication app(argc,argv);
//建立一个按钮,在按钮上显示“Quit”。
QPushButton button("Quit");
//connect为QObject的静态方法。
//绑定信号和槽,当点击“Quit”按钮时,会自动退出。
QObject::connect(&button,&QPushButton::clicked,&QApplication::quit);
button.show();
app.exec();
}
运行时会产生一个按钮,点击按钮时会退出。
这样不好观察我们可以换一个槽函数。
QObject::connect(&button,&QPushButton::clicked,[](){qDebug()<<"您点击了按钮。";});
将函数换成了
//lambda表达式,即匿名函数。
[](){qDebug()<<"您点击了按钮。";}
在使用lambda表达式之前需要在.pro文件中加入CONFIG+=c++11。(即加入c++11的支持)
运行结果如下:
每点击依次“Quit”按钮就会在屏幕上打印一句“您点击了按钮”。
(这些例子都来自“QT 开源社区”,自己微微改动了以下,不过我都是运行过的。^_^)