Qt学习心得-FFTW3在Qt5.7下的安装

1.说明

  1. qt的版本为qt-opensource-windows-x86-mingw530-5.7.0,可见编译器为MINGW,MSVC版本的没有加载成功,编译器如下图所示:
    Qt学习心得-FFTW3在Qt5.7下的安装_第1张图片

  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所在的目录,如下图:
Qt学习心得-FFTW3在Qt5.7下的安装_第2张图片

2.在项目的头文件上右击,选择添加现有文件,将fftw3.h文件添加进来;
Qt学习心得-FFTW3在Qt5.7下的安装_第3张图片

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

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

这是lib文件所在的目录,效果如下图:
Qt学习心得-FFTW3在Qt5.7下的安装_第4张图片

4.将dll文件放到编译文件夹的目录下,编译文件夹和当前的文件夹在同一目录下(这一步我是用另一台电脑做演示,所以跟上面的目录名和文件件并不相同),命名格式是这样的形式:build-FFT-Desktop_Qt_5_7_0_MinGW_32bit-Debug,其中FFT是项目名称。如下图所示:
Qt学习心得-FFTW3在Qt5.7下的安装_第5张图片

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

#include "mainwindow.h"
#include 
#include 
#include 
#include 
#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//构造输入数据
        {
            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; nprintf("%3.2lf+%3.2lfi    ", in1_c[n][0], in1_c[n][1]);
        }
        printf("\n");
        printf("result of FFT is:\n");
        for (n = 0; nprintf("%3.2lf+%3.2lfi    ", out1_c[n][0], out1_c[n][1]);
            qDebug()<0]<1];
        }
        printf("\n");
        fftw_free(in1_c); fftw_free(out1_c);//释放内存
    return a.exec();
}

在关闭弹出的窗口之后,在应用程序输出窗口,可以看到FFT变换的结果:
Qt学习心得-FFTW3在Qt5.7下的安装_第6张图片

总结

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

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

4.如果少了上面第4步,可以编译通过,但是可能无法运行,会出现下面的错误:
Qt学习心得-FFTW3在Qt5.7下的安装_第8张图片

你可能感兴趣的:(Qt学习心得)