小编Yun*_*chi的帖子

构建Mac和Windows GUI应用程序

我打算为Mac和Windows构建一个GUI应用程序.我一直在研究技术选择,如语言,库和构建工具,这样我就可以在两个平台之间共享尽可能多的代码.

主要要求是:

  1. 符合Mac App Store的要求.
  2. Mac和Windows上的原生外观.
  3. 需要在Mac上调用Quartz Window Services,在Windows上调用Windows API.
  4. 使用SQLite存储和读取数据.

我的帖子的长度已经失控,所以我把我的问题作为摘要移到了顶部,而上下文更进一步.

问题

  1. 我倾向于使用Python来简化编程.这对我来说是正确的选择吗?如果不是为什么C++会更好?如果是这样,我究竟如何设置py2app和pyobjc来编译python并构建一个为GUI加载XIB的独立应用程序?
  2. 我是否正确,我不应该在Mac上使用跨平台GUI库,以获得更原生的界面?或者我会更好地使用QT或wxWidgets?
  3. 如果我走错路和/或有更好的解决方案我没有考虑过,请指出它们:)

到目前为止我的研究和结论

GUI库

对于Mac,我排除了使用跨平台GUI库(如QT),因为它似乎不能在Mac上提供原生外观(看起来不合适和/或难以编写跟随Apple的应用程序)人机界面指南).wxWidgets说它使用本机库,但是这篇文章提到wxPython可能使用私有的Objective-C调用,并且不太可能被批准用于Mac App Store.最后,即使外观正确,两个平台的布局可能仍需要改变.

因此,我计划在Mac界面中使用原生Cocoa GUI库,但仍考虑将wxWidgets用于Windows GUI.

语言

对于主应用程序逻辑来说,似乎我最好的语言选择是C++或Python.显然,使用Python编写跨平台代码比使用C++更容易,但总是存在权衡.

蟒蛇

优点:更快写入和更容易维护.强大的跨平台库,可以大大缩短开发时间.

缺点:使用Python意味着使用PyObjC,它已经超过一年没有更新(从svn可以看出),我不清楚它是否仍然适用于未来版本的Xcode和OSX.此外,使用PyObjc和py2app设置任何理智的构建配置,并在Xcode之外使用xibs进行GUI,这是一场噩梦.

C++

优点:更容易在Mac和Windows上设置构建配置和依赖项.运行速度比Python快得多,但在我的情况下性能并不是一个大问题.

缺点:我不懂C++.我对C非常好,但看起来这并不能帮助我写好C++.我的总体印象是编写跨平台C++要困难得多,但我可能错了.有很多关于晦涩的错误的帖子.虽然Boost看起来很有希望.

构建工具

如果在两个平台上使用C++作为主要语言,那么设置起来似乎很简单.如果我使用Python,在Windows上设置似乎也很简单,因为我会使用wxWidgets进行GUI和py2exe部署.

至于Mac和Python,标准选择似乎是pyobjc和py2app.不幸的是,我没有找到任何使用pyibapp构建配置的例子,它使用XIB和Cocoa库而不是QT或wxWidgets.我不希望Xcode管理构建,因为我更喜欢将Python文件和应用程序资源放在Xcode项目目录之外.这将大大简化Windows的设置并使文件树更清晰.

关于QT的编辑:我再看看QT,花了几个小时和QT设计师一起玩.基本UI元素(按钮,文本字段,标签)看起来与Cocoa元素相同.我轻松地将QWindow和QTabView与一些元素组合在一起,它看起来像一个Cocoa应用程序.但是,有一些负面因素:

  • 行为有点偏,如缺乏弹性滚动,QTextEdit没有指示焦点的蓝色阴影.
  • QTableView看起来不像它的Cocoa对应物.
  • 元素之间的间距,与父视图的间距,不遵循准则.它通常可以通过调整布局来修复,但需要在任何地方完成,我会免费使用Xcode.
  • 缺少用于制作检查员的HUD元素.这是我在我的应用程序中很可能需要的东西,至少在Mac方面是这样.
  • 可访问性支持不佳.

我知道我很挑剔,但需要挑剔才能做出好的UI.整体QT似乎是Windows的一个很好的解决方案,但我想我会坚持使用Cocoa for Mac.我对现有程序进行了一些额外的研究,发现VLC,ChromeTransmission都为Mac制作原生GUI,而VLC使用QT for Windows,Chrome使用自定义框架,而Transmission使用GTK +和QT for Linux.

我想我已经决定使用Cocoa GUI for Mac和Qt或wxWidgets for Windows,但仍然在C++和Python之间分配共享逻辑.

c++ python wxpython cross-platform py2app

12
推荐指数
2
解决办法
8772
查看次数

如何获取 maven 依赖项列表以及从中获取它们的存储库

我想,给定一个 pom.xml 文件,扩展传递依赖项,对于每个直接和传递依赖项,列出 maven 从中获取它的存储库。

有了maven-dependency-plugin我能做的

mvn dependency:tree 获取传递依赖树,但不包含存储库信息

mvn dependency:list-repositories 获取使用的存储库列表,但不包含依赖信息

mvn dependency:get -Dartifact=<...> 获取单个工件和传递依赖项,但它似乎获取的比需要的多得多,我不知道我真正关心的是哪个。

java maven

5
推荐指数
1
解决办法
1920
查看次数

标签 统计

c++ ×1

cross-platform ×1

java ×1

maven ×1

py2app ×1

python ×1

wxpython ×1