我有一个简单的应用程序,是在 Xamarin 中为移动设备和 Windows 桌面开发的。在其开发过程中,使用了 C#、(Galasoft) MVVM-Light 和存储库模式。后端不是该项目的一部分。但为了获得完整的画面,需要使用 REST 端点。
现在我问自己,如果我想用 Qt 和 C++ 编写相同的应用程序(针对 Linux),可以使用之前的项目中的哪些内容。到目前为止我知道:
- View 必须完全重写,因为 Qt 使用“qml”而不是 XAML
- 此外,Qt 并不像 MVVM/C#/XAML 中那样使用“绑定(bind)”。但有一些替代方法,发现here
- 模型应该相对易于重用。
为了最大限度地减少代码的“重写”部分,我还找到了一个 C# 到 C++ 的包装器,但到目前为止仅适用于方法,而不适用于整个类。看看你自己 here
如果我的陈述在某些方面有误,是否有人有进一步的提示或可以纠正我的陈述?
感谢您的支持
最佳答案
根据经验,我最好的建议是避免尝试使用现有代码,而是使用 C++/Qt
从头开始编写新应用程序。您已经拥有一个应用程序可能很诱人,但尝试移植它可能比简单地重写它更痛苦,而且您还将错过从 Qt 的强大功能中受益的机会。例如,QML
的声明性性质没有明确的对应物,您肯定希望充分利用它。
唯一的异常(exception)是,如果您(就像您所说的那样)有一个非常独立的库部分,您将可以轻松地包装和重用它。但即便如此,这也会成为构建时的负担。我发现将整个代码库保留在 C++/Qt5
中会使构建和部署变得非常简单和优雅。 Qt
附带的工具,例如 qmake、qbs 和 QtCreator 非常适合跨平台。
除此之外,还有一些评论:
在链接中创建绑定(bind)的方式是正确的。这就是使用
QML
实现的方法。但这不是唯一的方法。有很多方法可以解决这个问题。以下是替代方案的文档:http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html在
C++
方面,您将处理称为信号和槽的东西,这里有很好的文档记录:http://doc.qt.io/qt-5/signalsandslots.html .
希望这对您有帮助!
关于c++ - Qt C++ 项目中 Xamarin 项目代码的可重用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42951768/