QT学习

这学期有一门课需要用到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函数,退出程序

 

 

 

 

 

 

发布了65 篇原创文章 · 获赞 74 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览