如何将 Qt 集成到现有的 C++ 项目中
Posted
技术标签:
【中文标题】如何将 Qt 集成到现有的 C++ 项目中【英文标题】:How to integrate Qt into an existing C++ project 【发布时间】:2019-05-21 14:50:45 【问题描述】:我正在自学 C++。我已经完成了许多教程,这些教程都是控制台项目,并且我一直在使用 Visual Studio Community 2019。现在我开始为一位同事处理一个项目,该项目应该解析他的收件箱中的特定邮件并总结其内容。
解析的底层代码已经在工作,现在我想创建一个简单的 UI 来显示数据,大多数人似乎建议使用 Qt 来完成这项工作。所以我也做了一些关于 Qt 的教程,它们都包含 Qt Creator。
现在我不介意 Qt 创建者,我只想在 Visual Studio 上继续我的项目,因为我已经非常熟悉它了。我已经将 Qt VS 工具添加到了我的 Visual Studio 中,并且我已经完成了这个线程中描述的步骤:add Qt to existing Visual Studio c++ project 但是现在我完全不知道我需要如何继续,我似乎找不到任何东西关于如何进行。
是否可以将我的项目完全转换为 Qt 应用程序,还是必须从头开始?如何在不使用 Qt 创建器的情况下显示 Qt 生成的窗口?我想我需要使用 QMake 工具来做一些事情,但我什至无法弄清楚我会如何做到这一点......
谁能给我一份详细的指南,告诉我应该如何进行或将我链接到一个?
【问题讨论】:
你自己安装了QT库吗? “我想我需要使用 QMake 工具” - 不。您不需要使用 qmake 或 qtcreator 或类似的东西来构建使用 Qt 的程序。您只需要一个文本编辑器和一个编译器/链接器。 Visual Studio 可以正常工作,记事本和 cmd shell 也可以。我个人使用 Emacs 进行编辑,使用 g++ 作为编译器,使用 CMake + ninja 作为构建系统来驱动基于 Qt 的项目的编译过程。 @Tom 是的,我有,这一步伴随着我所做的教程(确切地说是 Qt Wiki 上的 Qt for Beginners)。我还根据我原始帖子中的链接将它包含在我的项目中。我只是不知道从这一点开始,下一步我的想法是#inlcude 一些 Qt 类,但是 VS 抱怨它无法打开您需要执行以下操作:
-
Download and Install Qt。听起来你已经结束了。
包括您将使用的 Qt 部分。例如,对于一个简单的窗口,您将包含
#include <QWidget>
,对于一个按钮,您将包含#include <QPushButton>
。你总是需要做#include <QApplication>
这是一个full list 你可以使用的可能的东西。请注意,Qt 不仅仅是一个 gui 库。
像这样创建一个主函数:void main (int argc, char **argv)
在您的 main 中,您必须像这样创建应用程序实例:QApplication app(argc, argv);
实例化小部件。例如:auto myWindow=new QWidget() ; auto myButton = new QPushButton(myWindow) ;
显示您的窗口:myWindow->show();
开始事件循环:return app.exec();
现在您的代码已准备就绪,请尝试构建并链接到 Qt 库。我不确定如何在 VS 中执行此操作(我主要熟悉 Linux)。
就像 cmets 所说,有无数种方法可以启动和运行 Qt。任何编辑器/IDE 和任何构建系统都可能让你到达那里,但是,我建议你使用 QtCreator。为什么?因为将现有 C++ 代码导入 QtCreator 项目将比在现有 VS 项目中设置 Qt 更简单。 QtCreator 在 Qt 方面非常简单,即插即用,比 VS 更是如此。
对于一个 QtCreator 带有一堆开箱即用的示例项目,您只需单击并按“播放”即可构建和运行它们而无需任何设置。适应这一点比尝试在 VS 中手动设置一堆东西要容易得多。
QtCreator 中的示例:https://youtu.be/R6zWLfHIYJw?t=40
仅显示一个按钮的完整示例:
#include <QApplication>
#include <QPushButton>
int main(int argc, char **argv)
QApplication app (argc, argv);
QPushButton button ("Hello world !");
button.show();
return app.exec();
【讨论】:
谢谢Lennart,这个回答对我帮助很大。我已经从 wiki 上的 Qt 教程中推测了大部分内容,但很高兴看到我走在正确的道路上。可悲的是,我仍然无法让它工作:由于某种神秘的原因,我的 Visual Studio 既不能打开以上是关于如何将 Qt 集成到现有的 C++ 项目中的主要内容,如果未能解决你的问题,请参考以下文章
Cocoa:将 NSApplication 集成到现有的 c++ 主循环中
如何将来自 AWS Mobile Hub 示例项目的推送服务集成到现有的 android 项目中?
如何将 qml ScatterSeries 添加到现有的 qml 定义的 ChartView?