在哪里学习使用 Qt5 学习什么?

where and what to learn to use Qt5?

我尝试使用 Qt5,但我发现它很混乱。

我对 c++ 有很好的了解(我会说在中级专家水平之间)但不了解 javascript 或 QML(只有基础 HTML)

当我浏览 Qt 提供的示例和教程时,我发现更多可供参考 material 或类似 "what's new" 的东西供已经在使用 Qt 的开发人员使用。它向我展示了庞大的 Qt 库的随机(非系统)部分。

我目前对使用基于 Qt 小部件的应用程序而不是基于 Qt QML 的应用程序更感兴趣。

所以这就是我想问的。

  1. QML是主要语言,C++只是辅助语言吗?换句话说,学习 QML 对使用 QT 来说绝对必要吗?

  2. 将 Qt 用于基于 c++ 的应用程序是否已成为事实上的折旧?现在 Qt 只用于 QML 应用程序吗?

  3. 我需要学习什么才能使用 Qt?

我已经开发了一些 Qt 应用程序,但直到今天我对 qml 一无所知。它绝对是新方法,因为它比你想要的更新,但如果一切都在 Qt 6 或 7 中 qml 完成,我不知道。

所以回答你的问题:

  1. 目前我看不出有任何理由要求 qml 使用 Qt 开发基于桌面的应用程序。这对于移动设备可能有所不同,但到目前为止我还没有这方面的经验

  2. 在 Qt 5 中,据我所知,没有迹象表明 old 方式已被弃用。如有错误请指正

  3. 如果你已经很好地理解了c++,那么你要学习的主要是Signals & Slots and the main classes used in desktop applications (QApplication, QMainWindow, QWidget and QObject的原理,例如)

除了我建议下载和安装 Qt(包括示例)和 运行 一些 those examples. In Qt 4, there was also a program called qtdemo 我在 Qt 5 中找不到 link,所以我不知道它是否还存在。如果你能找到你能做的很好的例子。

目前关于Qt5的书籍不多,所以主要来源是官方文档和网络,但目前可用的书籍:

  • 免费书籍:Qt5 Cadaques,关于 QML 的书籍
  • 已更新到 Qt 5.3 的 Qt 通用书籍,但俄语版:Qt5.3. Professionalnoe programmirovanie na C++

    1. 不,我知道有人根本不使用 QML,但其他人使用它比使用 C++ 还多。这真的取决于您的需求。

    2. C++ 处于活动状态,例如 Digia 提供额外的 not-free modules, like Qt Charts which can be used botj with QML and C++. Also Qt developers always support new C++ standards. For example we have additional features when C++11 or C++14 已发布。因此,它绝对不是一种过时的语言。

QML只是一门前端语言,很不错,可以不头疼地构建漂亮的界面,但是后端还是C++代码。

网上有很多 Qt 教程和资源。您可以简单地使用搜索引擎找到您想要的内容。

你必须尽快学习的最重要的事情是信号槽的概念,原因有两个:

  1. 这是一个基本概念,几乎在所有 类 中都广泛使用。
  2. 即使您从其他库(如 boost.signals2)知道它,它也是以不同的方式实现的,使用 connect 函数和 qmake 预处理器。

一点也不复杂。你可以认为它对编程有很大的帮助,但你必须学会​​如何使用它(很简单)。

我认为 QML 不是必需的。它对移动应用程序可能很有用,但截至目前,我只开发桌面应用程序,而且我只使用 C++ 开发也没有问题 类。

Qt 是一个使用多年的非常重要的框架,而 QML 是最近才出现的。许多应用程序是使用 Qt 而不是 QML 构建的。

  1. 没有。但是由于不再为 QtWidgets 开发新功能(自 2012 年以来),您不应该考虑它 for new development:

Yes, the Qt Widgets module we have in Qt 5 is right now marked as ‘done’, which means we don’t have anybody actively working on new features for the module at this point in time.

作为一个花费多年时间开发基于 QWidget 的应用程序的人,我发现在 QML 中开发 UI 非常 容易 - 非常值得学习。

  1. 不,我不知道你是怎么得出这个结论的。 QtQuick 是一个前端层,除此之外它的功能非常有限。换句话说,对于除了最简单的应用程序以外的所有应用程序,您都需要一个 C++(或 Python、Haskell、Java 等)后端。

  2. Qt 是一个(巨大的)框架,您不能从 'beginning' 开始学习所有内容直到达到 'end' - 这没有意义。使用教程来感受 API 设计以及如何解决常见问题,并阅读参考文档以了解其功能。

    至于你需要学习的内容:core internals, MVC, QtQuick, qmake.

很难找到关于此的完整且统计上可证明的信息,但我很乐意根据我 6 年以上使用 Qt 的经验向您提供我的意见。

1) 不,为了使用 Qt 而学习 QML 并不是绝对必要的,有些目标使用 QML 更容易实现,而其他目标在 Qt/c++ 中更容易实现,还有一些事情根本无法用 QML 完成。 例如,如果你想创建一个基于简单数据的轻量级移动跨平台应用程序,并且用户体验远比业务逻辑重要,那么 QML 可能是最佳选择。在许多其他情况下,Qt/c++ 可能是更好的选择。

2) 一段时间以来,c++/Qt 一直是桌面应用程序唯一真正强大的跨平台框架,现在情况不再如此,桌面应用程序也逐渐失去人气,现在首选 Web 应用程序和移动应用程序由大型 public 和决定如何实施应用程序的经理决定。 在我看来,桌面应用程序已经贬值而不是 Qt/c++,出于这些原因,Digia(Qt 所有者)正在推动 QML 而不是传统的 c++ 东西,希望管理者会选择它来开发他们的下一个应用程序而不是编写网络应用程序或本机移动应用程序。

有一个领域 Qt 仍然是事实上的标准,那就是嵌入式应用程序市场。 有数以百万计的设备,如洗衣机、自动取款机、老虎机、汽车电脑、GPS 设备等,它们基于 Linux 并由完全用 Qt/c++ 编写的软件驱动。

3) 要开始学习 Qt,最初几天的课程是个好主意,但它不会便宜。 KDAB 可能是一个不错的选择,他们定期在欧洲和美国开设课程。 如果您的预算不允许课程,那么我的建议是查看 IDE 中的示例并阅读(部分)您可以在网上找到的大量教程和建议。