这学期有一门课需要用到QT,之前都是一直学习Java,没接触过C++,所以趁着这次机会学习下QT和c++,
我是跟着QT开源社区的Qt学习之路系列教程目录学习的,感觉是个不错的教程,我下面的笔记也是跟着该教程走
http://www.qter.org/forum.php?mod=viewthread&tid=629
安装QT和创建项目什么的就不介绍了,网上都有很多
Hello World
一开始时,我是这样子写
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel label("Hello, world");
label.show();
return app.exec();
}
系统提示 QLabel是未知的类型,对比后发现是在头部少了 #include <QLabel>,我认为这就相当于java的导入对应组件的包一样
#include <QApplication>
#include <QLabel>//相当java中导入了Jlabel包
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel label("Hello, world");
label.show();
return app.exec();
}
输出的结果是
信号槽
所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,用自己的一个函数(称为槽(slot))来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。这其实就是java的事件注册和监听,给按钮注册事件,当监听按钮被点击后,就执行事件,QT是当按钮被点击后,会发出信号,然后使用connect连接一个函数,这个函数被称为槽函数,该函数响应这个信号
QObject::connect() 有五个重载:
QMetaObject::Connection connect(const QObject *, const char *,
const QObject *, const char *,
Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, const QMetaMethod &,
const QObject *, const QMetaMethod &,
Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, const char *,
const char *,
Qt::ConnectionType) const;
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
const QObject *, PointerToMemberFunction,
Qt::ConnectionType)
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
Functor);
connect() 函数最常用的一般形式:
connect(sender, signal,
receiver, slot);
第一个参数sender,是发出信号的对象,第二个参数signal是发出的信号,第三个参数receiver是接收信号的对象,第四个参数slot是作出响应的函数,也就是槽函数,当 sender 发出了 signal 信号之后,会自动调用 receiver 的 slot 函数。
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton button("Quit");
QObject::connect(&button, &QPushButton::clicked, &QApplication::quit);
button.show();
return app.exec();
}
上面的例子,创建一个按钮,使用connect,当button发出clicked的信号时,就会调用QApplication的quit函数,退出程序