Qt学习心得-FFTW3在Qt5.7下的安装_fftw3 build类型有哪些?-程序员宅基地

技术标签: qt  qt5  Qt学习心得  fftw  

1.说明

  1. qt的版本为qt-opensource-windows-x86-mingw530-5.7.0,可见编译器为MINGW,MSVC版本的没有加载成功,编译器如下图所示:
    这里写图片描述

  2. qt中安装FFTW3,使用三种文件,头文件、lib文件和dll文件,如fftw3.h和libfftw3-3.lib,(三种精度的lib文件任选其一),后面这种文件的生成方法,可以参见我的另一篇博客《FFTW3在VS2013下的安装与使用示例》 中的 1.2安装 中的第1-3步

  3. FFTW3的介绍和下载也在上述的博客中。

  4. 本次博客使用的项目为Qt Widgets Application,基类是QMainWindow.

2.安装

1.将fftw3.h和libfftw3-3.lib复制到当前目录下,即main.cpp所在的目录,如下图:
这里写图片描述

2.在项目的头文件上右击,选择添加现有文件,将fftw3.h文件添加进来;
这里写图片描述

3.选择.pro文件,在下方加入一句:

LIBS += E:\QtCpp\fft_test3\libfftw3-3.lib

这是lib文件所在的目录,效果如下图:
这里写图片描述

4.将dll文件放到编译文件夹的目录下,编译文件夹和当前的文件夹在同一目录下(这一步我是用另一台电脑做演示,所以跟上面的目录名和文件件并不相同),命名格式是这样的形式:build-FFT-Desktop_Qt_5_7_0_MinGW_32bit-Debug,其中FFT是项目名称。如下图所示:
这里写图片描述

到此,fftw3就可以使用了。可以用下面的测试代码替换main.cpp的内容来测试:

#include "mainwindow.h"
#include <QApplication>
#include <fftw3.h>
#include <stdlib.h>
#include <QDebug>
#define N 5
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    /**********************一维复数DFT变换,复数到复数**********************/
        fftw_complex *in1_c, *out1_c;//声明复数类型的输入数据in1_c和FFT变换的结果out1_c
        fftw_plan p;//声明变换策略
        in1_c = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)* N);//申请动态内存,这里构造二维数组的方式值得学习
        out1_c = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)* N);
        p = fftw_plan_dft_1d(N, in1_c, out1_c, FFTW_FORWARD, FFTW_ESTIMATE);//返回变换策略

        int n;
        for (n = 0; n<N; n++)//构造输入数据
        {
            in1_c[n][0] = 1;
            in1_c[n][1] = 2;
            //*(*(in1_c + n) + 0) = 1;
            //*(*(in1_c + n) + 1) = 2;
        }
        fftw_execute(p);//执行变换
        fftw_destroy_plan(p);//销毁策略

        //以下为打印代码
        printf("data of FFT is:\n");
        for (n = 0; n<N; n++)
        {
            printf("%3.2lf+%3.2lfi    ", in1_c[n][0], in1_c[n][1]);
        }
        printf("\n");
        printf("result of FFT is:\n");
        for (n = 0; n<N; n++)
        {
            printf("%3.2lf+%3.2lfi    ", out1_c[n][0], out1_c[n][1]);
            qDebug()<<out1_c[n][0]<<out1_c[n][1];
        }
        printf("\n");
        fftw_free(in1_c); fftw_free(out1_c);//释放内存
    return a.exec();
}

在关闭弹出的窗口之后,在应用程序输出窗口,可以看到FFT变换的结果:
这里写图片描述

总结

  1. qt中安装FFTW3,使用到的文件有三种文件,头文件、lib文件和dll文件
  2. 如果lib文件也在当前目录下,那么加载lib文件的代码下面的也是可以的:
LIBS += "E:\QtCpp\fft_test3\libfftw3-3.lib"#带引号

3.qt的编译貌似有缓存的作用,举个例子,我把lib文件删除,并且把pro文件中加载lib文件的代码删除,依然能够编译通过,并且能够运行,前提条件是上次运行是正确的。只有故意写错一句代码,程序报错后,再改正这句代码,程序才会发现lib文件没了,开始大面积报错,如下图,这时,按照上述方法进行设置,程序才能正确运行。
这里写图片描述

4.如果少了上面第4步,可以编译通过,但是可能无法运行,会出现下面的错误:
这里写图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wwoll/article/details/52960415

智能推荐

python添加模块_python手动添加模块goodsinfo-程序员宅基地

文章浏览阅读700次。可以在pypi这上面搜索需要的模块。网站截图python3 setup.py install 运行安装命令。_python手动添加模块goodsinfo

python setup.py build_ext,python – setup.py:在其他任何事情之前运行build_ext-程序员宅基地

文章浏览阅读2k次。我正在使用setup.py,它在build_ext步骤中创建了一大堆SWIG接口文件.这需要先运行,因为后续的构建步骤需要一个完整的python文件列表才能正常工作(比如将python文件复制到包目录,创建egg,创建源列表等).当你进行setup.py安装时,这是当前发生的事情:running installrunning bdist_eggrunning egg_inforunning ins..._running build_ext

bootstrapValidator插件动态添加和移除校验_bootstrapvalidator addfield-程序员宅基地

文章浏览阅读9.6k次。bootstrapValidator对动态生成的表单进行校验,需要调用方法:addField。方法:addField(field,option); field可以是表单的name也可以是jQuery对象举例$("form").bootstrapValidator("addField",$("[name='roleName']"));或$("#form").bootstr_bootstrapvalidator addfield

mac下安装使用 brew命令安装lua_mac brew 无法按照lua-程序员宅基地

文章浏览阅读1k次。1、安装homebrew,执行以下命令homebrew官网/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2、执行命令brew install lua3、测试命令lua -v..._mac brew 无法按照lua

Js/Jquery获取input file的文件名_jquery input file-程序员宅基地

文章浏览阅读4.6k次。<input type="file" name="file" id="file" class="input_text80" />方法一:字符串截取var file = $("#file").val();var fileName = getFileName(file); function getFileName(o){ var pos=o.lastIndexOf("..._jquery input file

前端---【react阶段缩略版】_react缩略图依赖-程序员宅基地

文章浏览阅读84次。【代码】react阶段。_react缩略图依赖

随便推点

请求http图片报错:net::ERR_SSL_PROTOCOL_ERROR-程序员宅基地

文章浏览阅读3.9k次。背景:Chrome浏览器下,https网站请求http图片失败报错:net::ERR_SSL_PROTOCOL_ERROR原因:Chrome 升级 80 对混合内容资源加载策略进行了改变,http请求http资源时会自动升级。解决方法:需要服务器端配置SSL协议证书。参考:混合内容 & https 升级攻略..._net::err_ssl_protocol_error

python3 全局变量_python3全局变量、局部变量和非局部变量 – Python3教程-程序员宅基地

文章浏览阅读1.5k次。在本文中,你将了解Python全局变量、局部变量、非局部变量以及在何处使用它们。全局变量在Python中,在函数外部或全局范围内声明的变量称为全局变量,这意味着,可以在函数内部或外部访问全局变量。让我们看一个关于如何在Python中创建全局变量的例子。例1:创建一个全局变量x = "global"def foo():print("x inside :", x)foo()print("x outsi..._python3 全局变量

【路径规划】基于蚁群算法求解MAKLINK图二维路径规划matlab代码_画marklink线代码-程序员宅基地

文章浏览阅读1.5k次。1 简介本文提出一种基于蚁群算法和Maklink图的机器人路径规划方法,所述方法包括以下步骤:根据移动机器人工作环境建立相应的Maklink地图,采用多边形代表环境中的障碍物,通过自由链接线组成移动机器人自由移动的网络图;使用蚁群算法在Maklink地图上求取最优路径。机器人路径规划的前提是环境建模,通过相机、雷达等传感器提取到的信息,分析计算得到机器人认识的环境地图,使机器人在该环境中进行路径规划.目前常用的环境建模方法有可视图法(visibilitygraph)、链接图法(MAKLINK g.._画marklink线代码

std::this_thread::yield()使用理解_std::this_thread::yield() sleep-程序员宅基地

文章浏览阅读331次。摘选 stackoverflow 一段:http://stackoverflow.com/questions/11048946/stdthis-threadyield-vs-stdthis-threadsleep-forstd::this_thread::yield tells the implementation to reschedule the execution of threads,..._std::this_thread::yield() sleep

立方体环境贴图(Cube Mapping)之OpenGL原理_vertex shader compile log-程序员宅基地

文章浏览阅读8.7k次。立方体纹理是一种特殊的纹理技术,它用6幅二维纹理图像构成一个以原点为中心的纹理立方体。对于每个片段,纹理坐标(s, t, r)被当作方向向量看待,每个纹理单元都表示从原点所看到的纹理立方体上的图像。一个典型的立方环境贴图如下: 图1其中,前、后、左、右、上、下为环境图的各个方位截图。X,_vertex shader compile log

安装Matlab出现“弹出DVD 1并插入DVD 2以继续”的解决办法_dvd1弹出并插入dvd2-程序员宅基地

文章浏览阅读5.3k次,点赞5次,收藏3次。我的Matlab安装包是两个ISO(光盘映像文件),如下:然后在我安装到一定时候,弹出了下面的对话框首先:根本原因是前后插入的DVD 盘符不一致,在我安装DVD 1的时候,我的DVD 1 的盘符是G当我弹出DVD 1 插入DVD 2 的时候,我的DVD 2 的盘符变成了H既然找到了原因,那么解决方法就很简单啦~解决方法:把DVD 2 弹出,然后再插入DVD 2,盘符就变成G了,如果一..._dvd1弹出并插入dvd2