如何运行需要QT的简单cpp文件?

时间:2014-02-04 16:08:48

标签: c++ qt

我的机器上安装了QT 5.1.1,但是我遇到了一些麻烦。我正在尝试运行以下需要QT的简单程序:

//Playing Video
#include "cv.h" 
#include "opencv2\objdetect\objdetect.hpp"
#include "opencv2\core\core.hpp"
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\features2d\features2d.hpp"
#include "opencv2\calib3d\calib3d.hpp"
#include "opencv2\nonfree\nonfree.hpp"
#include "highgui.h" 
#include <openbr\openbr_plugin.h>

using namespace cv;

static void printTemplate(const br::Template &t)
{
    const QPoint firstEye = t.file.get<QPoint>("Affine_0");
    const QPoint secondEye = t.file.get<QPoint>("Affine_1");
    printf("%s eyes: (%d, %d) (%d, %d)\n", qPrintable(t.file.fileName()), firstEye.x(), firstEye.y(), secondEye.x(), secondEye.y());
}
int main(int argc, char *argv[])
{
    br::Context::initialize(argc, argv);
    // Retrieve classes for enrolling and comparing templates using the FaceRecognition algorithm
    QSharedPointer<br::Transform> transform = br::Transform::fromAlgorithm("FaceRecognition");
    QSharedPointer<br::Distance> distance = br::Distance::fromAlgorithm("FaceRecognition");
    // Initialize templates
    br::Template queryA("../data/MEDS/img/S354-01-t10_01.jpg");
    br::Template queryB("../data/MEDS/img/S382-08-t10_01.jpg");
    br::Template target("../data/MEDS/img/S354-02-t10_01.jpg");
    // Enroll templates
    queryA >> *transform;
    queryB >> *transform;
    target >> *transform;
    printTemplate(queryA);
    printTemplate(queryB);
    printTemplate(target);
    // Compare templates
    float comparisonA = distance->compare(target, queryA);
    float comparisonB = distance->compare(target, queryB);
    // Scores range from 0 to 1 and represent match probability
    printf("Genuine match score: %.3f\n", comparisonA);
    printf("Impostor match score: %.3f\n", comparisonB);
    br::Context::finalize();
    return 0;
}

它还需要OpenCV 2.4.6.1和OpenBR,但这不是问题。

上述代码中与QT相关的所有定义(变量和函数)都是未定义的。我试图在QT文件夹中找到相关的h文件并包含它们,但是这没有成功,因为我无法使用qtcore.h(但是一个名为qtcore的不同文件包含了很多包含我现在不用的文件使用)。我试图在项目属性中的“其他包含目录”下添加QT“include”目录,但这也不起作用。我还尝试在“其他库目录”下添加QT“lib”文件夹,但这也没有用。

基本上,我尝试了我能想到的一切。有人可以解释一下我如何使用这些QT定义吗?我真的被困住了,我可以使用任何帮助。

谢谢, 吉尔。

2 个答案:

答案 0 :(得分:1)

  1. (可选)更新至Qt 5.2。

  2. 启动Qt Creator。

  3. 创建一个新的Qt Widgets应用程序项目。你可以给类/文件随机命名,没关系。取消选中“生成表单”选项,因为您不需要任何表单。

  4. 从项目中删除main.cpp以外的所有文件。您可以通过在左侧的项目树中右键单击它们并选择“删除文件”来执行此操作。

  5. 将代码复制粘贴到主cpp中。确保完全替换main.cpp的内容,默认内容不应再存在。

  6. 将opencv库添加到项目中。右键单击项目的根目录,选择“添加库”,然后从那里开始。

  7. 右键单击项目根目录并选择“运行qmake”重新运行qmake。

  8. 按Ctrl-R(Mac上为Cmd-R)构建并运行项目。

答案 1 :(得分:-1)

Qt使用(非标准)自定义工具链,必须在编译Qt相关代码之前运行。我从来没有尝试过在QtCreator之外使用Qt,但如果你真的需要Qt,我建议你使用QtCreator IDE;如果你当然没有使用它的话。这是一个非常不错的IDE,即使对于非Qt项目也是如此。

另外,如果您还没有这样做,请确保已安装Qt SDK;单靠标题是不够的。 QtCreator本身也不够,你需要SDK。如果你不喜欢这样做,我的建议是看看Poco。它不是Qt的1:1替代品,但它是一个非常成熟的框架。