QT 源码分析 - exec 函数

目录

一、exec() 简介:

二、QDialog::exec()

三、QCoreApplication::exec()

四、QEventLoop 的 exec()


一、exec() 简介:

1、说明:

事件循环,首先是一个无限 “循环”

程序在 exec() 里面无限循环,能让跟在 exec() 后面的代码得不到运行机会,直至程序从 exec() 跳出

其次,之所以被称为“事件”循环,是因为它能接收事件,并处理之。

当事件太多而不能马上处理完的时候,待处理事件被放在一个“队列”里,称为“事件循环队列”。

当事件循环处理完一个事件后,就从“事件循环队列”中取出下一个事件处理之。

当事件循环队列为空的时候,它和一个啥事也不做的永真循环有点类似,但是和永真循环不同的是,事件循环不会大量占用 CPU 资源。

事件循环的本质就是以队列的方式再次分配线程时间片

嵌套

一个线程 可拥有 多个 事件循环

但,事件循环必须是嵌套的,一层套一层

子层的事件循环执行 exec() 的时候,父层事件循环就处于中断状态;即:只有当前 QEventLoop 被激活

虽然父层中断,

Qt6 环境中集成和使用 TA-Lib(Technical Analysis Library)需要进行几个关键步骤,包括 TA-Lib 的安装、Qt6 项目的配置以及在 Qt 应用程序中调用 TA-Lib 提供的函数。以下是一个完整的集成和使用方案: ### 配置 TA-Lib 开发环境 TA-Lib 是一个用于技术分析的 C/C++ 库,广泛用于金融数据处理。首先需要在系统中安装 TA-Lib 并确保其开发文件可用。 安装 TA-Lib 可通过以下命令(以 Ubuntu 为例): ```bash sudo apt-get install libta-dev ``` 如果系统没有预编译的包,则可以从源码编译安装: ```bash wget https://sourceforge.net/projects/ta-lib/files/ta-lib/0.4.0/ta-lib-0.4.0-src.tar.gz tar -xzf ta-lib-0.4.0-src.tar.gz cd ta-lib ./configure make sudo make install ``` 默认情况下,TA-Lib 会被安装到 `/usr/local/lib` 和 `/usr/local/include/ta-lib` 目录下。 ### 配置 Qt6 项目 在 Qt6 项目中使用 TA-Lib,需要修改 `.pro` 文件以链接 TA-Lib: ```qmake QT += core gui widgets TARGET = Qt6TAExample TEMPLATE = app SOURCES += main.cpp \ mainwindow.cpp HEADERS += mainwindow.h # TA-Lib 配置 LIBS += -lta_lib INCLUDEPATH += /usr/local/include/ta-lib ``` ### 在 Qt6 应用程序中使用 TA-Lib 以下是一个简单的 Qt6 应用示例,展示如何调用 TA-Lib 计算移动平均线(SMA): ```cpp #include <QApplication> #include <QLabel> #include <QDebug> #include <vector> #include "ta_libc.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); // 示例数据 std::vector<double> inOpen(100, 100.0); std::vector<double> inHigh(100, 110.0); std::vector<double> inLow(100, 90.0); std::vector<double> inClose(100, 105.0); std::vector<double> outReal(100); // 计算 10 日简单移动平均线 (SMA) int outBegIdx, outNBElement; TA_RetCode retCode = TA_SMA(0, 99, inClose.data(), 10, &outBegIdx, &outNBElement, outReal.data()); if (retCode == TA_SUCCESS) { qDebug() << "SMA 计算成功,起始索引:" << outBegIdx << ",元素数量:" << outNBElement; QLabel label(QString("SMA 最后值: %1").arg(outReal[outNBElement - 1])); label.show(); } else { QLabel label("TA-Lib 计算失败"); label.show(); } return a.exec(); } ``` ### 部署与运行 在部署 Qt6 应用程序时,确保目标系统上已安装 TA-Lib 或将 TA-Lib 的动态库文件打包随应用程序一起发布。若使用静态链接,则需要在编译 TA-Lib 时选择静态构建,并在 `.pro` 文件中指定静态库路径。 此外,Qt6 支持跨平台部署,因此在 Windows 或 macOS 上使用 TA-Lib 时,需相应地调整编译配置和库路径。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值