gpt4 book ai didi

c++ - Qt in Visual Studio 2013 with cmake - 我如何让它工作?

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:40 25 4
gpt4 key购买 nike

我目前正在尝试将库 Qt 集成到我的 C++ 项目中。首先,我认为我可以像使用任何其他库一样使用它。我下载了它,将包含路径和库添加到我的 VS 项目中,并尝试了一小段代码示例,它只创建了一个带有文本编辑和按钮的简单窗口。这有效,并显示了小的用户界面。

现在我开始尝试实现一个从 QWidget 派生的类并意识到,它可能不是那么简单。我尝试创建的类如下所示:

#include <QtWidgets\qstylepainter.h>
#include <QtWidgets\qwidget.h>

class MapRenderer : public QWidget{
Q_OBJECT
public:
MapRenderer(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent* event);
};

以及对应的cpp文件:

MapRenderer::MapRenderer(QWidget *parent) : QWidget(parent){
}

void MapRenderer::paintEvent(QPaintEvent *event){
QPainter p(this);
p.setPen(QPen(Qt::black, 3));
p.drawPoint(QPointF(10, 20));
}

现在,当我尝试编译它时,我开始收到链接器三个看起来像这样的链接器错误:

error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl MapRenderer::metaObject(void)const " (?metaObject@MapRenderer@@UEBAPEBUQMetaObject@@XZ)   G:\Documents\C++ Projects\HistoricalBorders\MapRenderer.obj
error LNK2001: unresolved external symbol "public: virtual void * __cdecl MapRenderer::qt_metacast(char const *)" (?qt_metacast@MapRenderer@@UEAAPEAXPEBD@Z)
error LNK2001: unresolved external symbol "public: virtual int __cdecl MapRenderer::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MapRenderer@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)

所以我在互联网上四处看看,发现 Qt 显然需要比带有“普通”库的“普通”c++ 项目复杂得多的构建过程。我读到了 qmake 和一个 Visual Studio Qt 插件,可用于在 Visual Studio 中创建 Qt 项目。

所以我试了一下并安装了 Visual Studio 加载项,并在其设置中指定了我的 Qt 版本的根目录。之后我的项目仍然无法编译,但当时唯一的错误信息是:

错误 LNK1112:模块机器类型“x64”与目标机器类型“X86”冲突

现在我不太明白这一点,因为我的 Qt 库是 64 位的,我的项目配置也是 64 位的,以及我正在使用的所有其他库。此外,在安装插件之前我没有遇到这个问题。我不得不说,我的项目是一个“普通”的 Visual Studio C++ 控制台应用程序。我看到,因为我安装了 VS 插件,所以在 Visual Studio 中创建新项目时也可以选择“Qt-console application”。我也试了一下,但创建后甚至没有编译。我也不太清楚“Qt 项目”与普通 VS 项目的区别是什么,除了默认包含 Qt 库。

我必须提到的另一件事是我正在使用 cmake 创建我的 VS 项目文件,因为我使用版本控制 (mercurial) 并且多个人将在该项目上工作。

目前我完全不知道如何让这个库工作。

现在我的问题是什么?老实说,我真的不知道。我问自己的是:

  • 体系结构不匹配链接器错误从何而来?
  • 我可以创建一个普通的 VS 控制台应用程序并让它与 Qt 一起工作吗?
  • “Qt 控制台应用程序”与普通 VS 项目有何区别?
  • 是否可以使用 cmake 生成与 Qt 兼容的 VS 项目?

编辑:现在我再次卸载了加载项,重新安装了它,但现在又出现了旧的链接器错误(不再是体系结构不匹配)。我不知道为什么。

编辑:好的,一些澄清。是的,我想使用 cmake。我也已经有了自己编写的 cmakelists.txt 和 findQt.cmake,它们会询问您的 Qt 根目录,然后将必要的包含路径和库路径添加到项目中。到目前为止,这也有效。例如。下面的代码编译没有问题,并显示了一个界面:

QApplication app(argc, argv);
QTextEdit *textEdit = new QTextEdit;
QPushButton *quitButton = new QPushButton("&Quit");

QObject::connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(textEdit);
layout->addWidget(quitButton);
QWidget window;
window.setLayout(layout);
window.show();
app.exec();

现在,如果我尝试创建一个如上所示的类(MapRenderer),我也会收到如上所示的链接器错误。现在我以为我做错了什么。我唯一的问题是什么。从你的评论中,drescherjm,我发现我可能错过了 moc-step(抱歉,但我不知道那到底是什么)。

最佳答案

如果你有Qt工程文件(.pro)(或者可以通过某种方式得到它),你可以运行

cd <pro_folder>
qmake -tp vc

(重新)生成带有正确设置的 Qt 构建过程的 Visual Studio 项目文件,包括

  • moc(元对象编译器;这就是您现在缺少的),
  • uic(处理设计师的文件)
  • rcc(资源编译器)。

所有生成的文件都将被正确编译和链接。为此,您甚至不需要 AddIn。

关于c++ - Qt in Visual Studio 2013 with cmake - 我如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26778281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com