【问题标题】:Using Qt libraries on VS在 VS 上使用 Qt 库
【发布时间】:2017-11-16 08:28:24
【问题描述】:

我正在尝试在 VS 上构建一个 C++ 项目。该项目是在 Linux 机器上使用 NetBeans 开发的,现在我在 Windows 上使用 Visual Studio 2017。

它不是使用 Qt Creatos 开发的,因此这些库是手动添加的,带有如下语句:

#include <QtCore>
#include <QCoreApplication>
#include <QObject>
#include <QStringList>
#include <QMap>
...

这是我到目前为止所做的:

  • 下载了最新的 Qt 版本
  • 解压 C:\Qt 中的所有内容
  • 在 VS 属性 > VC++ 目录 > 包含目录 - 我添加了 C:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include 和 C:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore
  • 在 VS 属性 > VC++ 目录 > 库目录中 - 我添加了 C:\Qt\Qt5.9.2\5.9.2\msvc2017_64\lib

但是,当我尝试#include &lt;QtCore&gt; 时,VS 似乎期望更多: https://imgur.com/a/ruSbi

但它不能编译。

Severity    Code    Description Project File    Line    Suppression State
Error (active)  E0020   identifier "QEvent" is undefined        c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qabstractanimation.h 121 
Error (active)  E0020   identifier "QEvent" is undefined    c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qabstractstate.h 73  
Error (active)  E0020   identifier "QEvent" is undefined    c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qabstractstate.h 74  
Error (active)  E0020   identifier "QEvent" is undefined    c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qabstractstate.h 76  
Error (active)  E1455   member function declared with 'override' does not override a base class member      c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qabstracttransition.h    105 
Error (active)  E1455   member function declared with 'override' does not override a base class member  c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qanimationgroup.h    70  
Error (active)  E1455   member function declared with 'override' does not override a base class member  c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qcoreapplication.h   190 
Error (active)  E0020   identifier "qint8" is undefined c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qdatastream.h    147 
Error (active)  E0020   identifier "qint8" is undefined c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qdatastream.h    163 
Error (active)  E0260   explicit type is missing ('int' assumed)    c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qendian.h    236 
Error (active)  E0801   "qint8" is not a class or function template name in the current scope   c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qendian.h    236 
Error (active)  E0065   expected a ';'  c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qendian.h    236 
Error (active)  E0020   identifier "qint8" is undefined c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qendian.h    236 
Error (active)  E0020   identifier "QEvent" is undefined    c:\Qt\Qt5.9.2\5.9.2\msvc2017_64\include\QtCore\qeventloop.h 79  
Error (active)  E1455   member function declared with 'override' does not override a base class member
...     

所以,我想我错过了一些东西。我是 VS 的新手,所以我将不胜感激。

谢谢

【问题讨论】:

  • 无法编译。 - 显示编译器消息
  • 只需使用在线/离线安装程序,而不是手动解包/构建 Qt。并在 Visual Studio 2017 中使用 Qt 插件
  • @scopchanov 是的,抱歉,已编辑。
  • @DmitrySazonov 是的,我是这样做的,但是安装程序只是将所有组件解压缩到给定文件夹中,不是吗?我使用了离线安装程序:qt-opensource-windows-x86-5.9.2.exe
  • @enekow 不,它还修补 Qt5Core.dll 并做一些其他的事情。再说一遍:你安装 Qt 插件了吗?

标签: c++ visual-studio qt visual-studio-2017


【解决方案1】:

QtCore 既是目录又是包含文件:

Directory: <Qt_Install_Path>/include/QtCore
File:      <Qt_Install_Path>/include/QtCore/QtCore

您还需要在每个包含 Q_OBJECT 宏的标头上运行 Qt mocmoc 将生成额外的 C++ 文件,您需要对其进行编译。使用qmakecmake 之类的工具非常简单。对于 VS,您可能希望使用 Qt Visual Studio Add-in

【讨论】:

  • 谢谢@Benjamin 一定是这样。然而,我安装了 Qt VS Tools,我仅有的选项是 Qt DesignerQt Linguistopen Qt prj。我已经将我的 Qt 版本添加到 Qt 选项中,但我无法弄清楚如何自动运行 moc。谢谢!
  • @enekow 如果你要在 VS 中创建 Qt 项目,它将自动为 moc 创建构建规则。
  • @DmitrySazonov 所以解决方法是在 VS 中启动一个新的 Qt 项目并将我的文件放回其中。感谢您的帮助!
  • @enekow 这不是一种解决方法。这是一种应有的方式。但无论如何,Qt addin 的开发非常缓慢,所以我更喜欢在我的项目中使用 CMake。它不需要 qt 插件,并且可以与大多数 IDE 原生兼容。
  • @enekow 或者,如果您不需要 Visual Studio IDE,而只需要 MSVC 编译器,则可以直接使用 Visual C++ 编译器命令行,或使用其他 IDE,并使用.pro 文件(或您拥有的任何文件)。
猜你喜欢
  • 2021-08-02
  • 2013-02-18
  • 1970-01-01
  • 2014-10-22
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多