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、通信协议及开发工具链等核心内容。

全部评论

相关推荐

评论
3
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务