Qt C++ 项目中 Xamarin 项目中代码的可重用性

Posted

技术标签:

【中文标题】Qt C++ 项目中 Xamarin 项目中代码的可重用性【英文标题】:Reusability of Code from a Xamarin Project in a Qt C++ Project 【发布时间】:2017-03-22 12:33:15 【问题描述】:

我有一个简单的应用程序,它是在 Xamarin 中为移动设备和 Windows 桌面开发的。对于其开发 C#,使用了 (Galasoft) MVVM-Light 和存储库模式。后端不是这个项目的一部分。但要获得完整的图片,则使用 REST EndPoints。

现在我问自己,如果我想在 Qt 和 C++ 中编写相同的应用程序(适用于 Linux),可以使用以前的项目中的哪些内容。到目前为止,我知道:

必须完全重写视图,因为 Qt 使用“qml”而不是 XAML Qt 也不像在 MVVM/C#/XAML 中那样使用“绑定”。但是有一些替代方法,找到here 模型应该相对易于重复使用。

为了最小化代码的“重写”部分,我还找到了一个 C# 到 C++ 包装器,但到目前为止仅适用于方法,而不适用于整个类。见自己here

如果我的陈述在某些方面有误,是否有人有进一步的提示或可以纠正我的陈述?

感谢您的支持

【问题讨论】:

【参考方案1】:

根据经验,我最好的建议是避免尝试使用现有代码,而是在C++/Qt 中从头开始编写新应用程序。您已经拥有一个应用程序可能很诱人,但尝试移植它可能会比简单地重写它更痛苦,而且您也会错失从 Qt 的优势中受益的机会。例如,QML 的声明性质没有明确的对应物,您肯定希望充分利用它。

唯一的例外是如果您(如您所说)有一个非常独立的库部分,您将能够轻松地包装和重用。但即便如此,在构建时也是一种负担。我发现将整个代码库保存在 C++/Qt5 中可以使构建和部署变得非常简单和优雅。 Qt 自带的 qmakeqbsQtCreator 等工具非常适合跨平台使用。

除此之外,还有一些cmets:

在您的链接中创建绑定的方法是正确的。这就是您使用QML 的方式。但这不是唯一的方法。有很多方法可以解决它。以下是替代方案的文档:http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html

C++ 方面,您将处理称为信号和槽的东西,这里有很好的记录:http://doc.qt.io/qt-5/signalsandslots.html。

希望这对您有所帮助!

【讨论】:

【参考方案2】:

老实说,这是一次彻底的重写。 Qt 是 C++ 而 Xamarin 主要是 C# 的原因。

【讨论】:

以上是关于Qt C++ 项目中 Xamarin 项目中代码的可重用性的主要内容,如果未能解决你的问题,请参考以下文章

C++ 需要有关 OpenCV 教程中代码的帮助

关于网友博客中代码的可用性问题

如何使用 C++ 非托管库在 Visual Studio 2017 中为 Xamarin.Forms 设置项目?

如何使用 Qt Creator 将 C++ 头文件添加到 Qt 项目

NSURLErrorDomain 中代码的含义是啥?

扩大 rmarkdown html 中代码的输出