7.1 Qt 开发 基础知识
一、什么是 Qt?它的主要特点是什么?
Qt 是一个跨平台的 C++ 应用程序开发框架。主要特点:跨平台、信号槽机制、元对象系统、丰富的UI组件、完善的文档。
二、什么是信号与槽
信号:信号是 Qt 对象的成员函数,当对象的状态改变或特定操作完成时,信号就会被对象发射。信号函数无需在类中实现,只需声明即可。
槽函数:槽函数是类的成员函数,可以像普通成员函数一样被实现。槽函数通过 QObject::connect 函数与信号关联起来,当与之关联的信号被发射时,槽函数就会被自动调用。
三、信号和槽的连接类型:QObject::connect 函数
1)信号与槽的参数类型和数量要一致。
2)有多种重载版本。
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection);
// connect(button, SIGNAL(clicked()), this, SLOT(onButtonClicked()));
static QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection);
// connect(button, &QPushButton::clicked, this, &MyWidget::onButtonClicked);
static QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor);
// connect(button, &QPushButton::clicked, [&]() {qDebug() << "Button clicked";});
3)连接类型(这个还真被面试过)
- Qt::AutoConnection:这是默认的连接类型。如果信号和槽在同一线程,使用直接连接;如果在不同线程,使用队列连接。同线程同步执行,跨线程异步执行(由事件循环处理到该事件时调用)。
- Qt::DirectConnection:信号发射时,槽函数会立即被调用,就像直接调用函数一样。槽函数在发送信号的线程中执行。
- Qt::QueuedConnection:信号发射后,槽函数会被放入接收者所在线程的事件队列中,在接收者所在线程的事件循环处理该事件时调用。槽函数在接收者所在线程中执行。
- Qt::BlockingQueuedConnection:与 Qt::QueuedConnection 类似,但发送信号的线程会被阻塞,直到槽函数执行完毕。只能用于不同的线程。
- Qt::UniqueConnection:确保信号和槽之间只有一个有效连接。防止信号发射时,槽函数按照连接的次数被多次调用。
4)Qt5 支持 lambda 表达式匿名函数作为槽函数,并且
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++/嵌入式开发 秋招面经 文章被收录于专栏
一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

