Qt在不同平台上的安装

30次阅读

共计 3870 个字符,预计需要花费 10 分钟才能阅读完成。

Qt 在不同平台上的安装

来源 | 愿码 (ChainDesk.CN) 内容编辑
愿码 Slogan | 连接每个程序员的故事
网站 | http://chaindesk.cn

愿码愿景 | 打造全学科 IT 系统免费课程,助力小白用户、初级工程师 0 成本免费系统学习、低成本进阶,帮助 BAT 一线资深工程师成长并利用自身优势创造睡后收入。
官方公众号 | 愿码 | 愿码服务号 | 区块链部落
免费加入愿码全思维工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码

本文阅读时长:9min
Qt 为移动和嵌入式设备提供了不同的外观,用户期望不同的演示风格。这是在框架内控制的,因此开发人员可以专注于开发单个应用程序。
Qt 框架在两个独立的发行版中发布,一个是商业版,一个是开源版(称为双重许可版)。通过这种方式,他们可以免费支持开源兼容的应用程序,同时为封闭源商业项目提供不受限制的使用。在 2000 年之前(2.2 版本发布),免费分发的源代码已经获得了各种许可证,一些团体认为这些许可证与常见的开源计划不兼容。对于 2.2 版本,它被改为 GPL 许可,这解决了对该集团对真正的开源自由的承诺的任何担忧。2007 年,Qt 4.5 发布,他们将 LGPL 作为选择,为喜欢更宽松许可的开发人员提供选择。
开始使用 therecipe / qt

为了开始我们对 Qt 的探索和对 Go 的绑定,我们将构建一个简单的 hello world 应用程序。为了能够这样做,我们首先需要安装 therecipe / qt,这取决于我们必须首先设置的各种先决条件。与 Go-GTK 一样,我们将依赖本机库,这需要我们设置 CGo 功能并安装适合当前平台的 Qt 库。
准备 CGo

Qt Go 绑定需要 CGo 的存在才能使用本机库。在完整的开发系统上,可能已经建立了这个系统。
安装 Qt

Qt 网站提供各种安装方法,包括任何拥有 Qt 帐户(可以免费注册)的人都可以使用的定制在线安装程序。通常,Qt 安装附带 Qt Creator(项目 IDE),GUI 设计器,其他工具和示例。访问上一个站点将自动检测您的系统并建议最合适的下载(这通常是最佳选择)。
请注意,Qt 安装可能非常大。如果硬盘驱动器上没有至少 40 GB 的空间,则需要在安装前留出一点空间。
一些操作系统提供 Qt 库和工具作为其包管理器的一部分,它通常提供更轻量级的安装,它将自动保持最新。
在多个平台上安装 Qt

苹果系统
在 Apple macOS 上,安装的最佳方法是使用 Qt 下载站点上提供的安装程序。下载 macOS 安装程序。下载后,打开包并在里面运行程序; 这将安装选定的编译器,工具和支持应用程序。如果在安装过程中遇到任何错误,第一步是检查 Xcode 安装是否完整且是最新的。
视窗
在 Windows 上安装比我们看到的其他一些工具包更简单,因为 Qt 安装程序有一个 mingw 捆绑包来设置大多数编译要求(尽管仍然建议为绑定阶段设置自己的编译器)下一个。要安装它,请转到前面列出的下载页面并访问 Windows 安装程序。运行下载的可执行文件,然后按照屏幕上的说明进 建议安装到默认位置。完成后,您就可以设置绑定了。
Linux
使用 Qt 网站上的在线安装程序是最简单的方法,虽然可以通过系统的包管理器进行安装(如果你想尝试包管理器方法,那么首先阅读 Qt 文档)。在大多数平台上,Qt 下载网站将正确检测平台并提供简单的运行安装程序。下载文件后,您应该使其可执行,然后运行它:

这将像在 macOS 上一样启动安装程序,从这里,按照屏幕上的说明操作并完成安装。
许可证 / Qt 帐户
当涉及到登录屏幕时,如果您有,请输入您的 Qt 帐户详细信息。如果您有资格获得他们的开源许可证(GPL 或 LGPL),您可以跳过此步骤,确保电子邮件和密码字段为空。
安装 qt(绑定)

要使用 qt(Go Qt 绑定),我们需要下载项目及其依赖项,然后运行安装脚本来配置和编译库。如果使用 Windows,建议使用 MSYS2 终端。
如果您将 Qt 下载安装到默认位置以外的任何位置,请确保将 QT_DIR 环境变量设置为您选择的位置。
首先,应该使用 go 工具,运行 go get 和安装库及其依赖项 go get。
下载完成后,我们需要运行 qtsetupqt 项目中包含的工具; 所以,在 cmd/qtsetup 文件夹中,执行 go run main.go。使用 Linux 终端:

此过程完成后,绑定应该可以使用了。如果您遇到错误,那可能是因为 Qt 工具未正确安装或位置已自定义且您忘记设置 QT_DIR 环境变量。
建立

要使用 Go 构建我们的第一个 qt 应用程序,让我们创建另一个 Hello World 应用程序。与前面的示例一样,我们将在单个应用程序窗口中使用简单的垂直框布局。以下代码应足以加载您的第一个应用程序:
package main
import (
“os”

“github.com/therecipe/qt/widgets”
)

func main() {
app := widgets.NewQApplication(len(os.Args), os.Args)

window := widgets.NewQMainWindow(nil, 0)
window.SetWindowTitle(“Hello World”)

widget := widgets.NewQWidget(window, 0)
widget.SetLayout(widgets.NewQVBoxLayout())
window.SetCentralWidget(widget)

label := widgets.NewQLabel2(“Hello World!”, window, 0)
widget.Layout().AddWidget(label)

button := widgets.NewQPushButton2(“Quit”, window)
button.ConnectClicked(func(bool) {
app.QuitDefault()
})
widget.Layout().AddWidget(button)

window.Show()
widgets.QApplication_Exec()
}
让我们从这段代码片段中注意一些细节。每个窗口小部件构造函数都采用(通常)两个参数,每个参数都是父窗口小部件和 flags 参数。传入的其他类型通常会在这些值之前添加,并在函数名称中包含附加参数的注释。例如,widgets.NewQLabel2(title, parent, flags)相当于 widgets.NewQLabel(parent, flags).SetTitle(title)。此外,您将看到布局应用于新的 widgets.QWidget 直通 SetLayout(layout),并通过设置为窗口内容 window.SetCentralWidget(widget)。
要加载显示并运行应用程序,我们调用 window.Show()然后 widgets.QApplication_Exec()。此文件以通常的方式构建 go build hello.go:

由于 Qt 框架的大小,构建的文件非常大。在针对特定分发进行包装时,这将显着降低。
运行

构建阶段的输出是一个二进制文件,可以在命令行上或通过双击文件管理器在当前计算机上执行。另外,您可以直接执行它 – 无论 go run hello.go 哪种方式,您应该看到一个简单的窗口,如下所示:

在此阶段,二进制文件可以在具有安装 Qt 的相同体系结构的计算机上执行。
对象模型和事件处理

Qt 框架是使用 C ++ 语言编写的,并且以前用 C ++ 编码的人很熟悉它的大部分架构。值得注意的是,Go 不是一种完整的面向对象语言,因此不能直接匹配这些功能。特别是,我们应该看一下继承,因为它对 Qt 对象模型很重要。
继承
Qt API 是一个完全面向对象的模型,它大量使用了继承模型。虽然 Go 并不真正支持传统方式的面向对象继承,但它的组合方法非常强大,并且在其位置上运行良好。结果意味着您可能不会注意到差异!
内存管理
正如您在前面的示例中已经注意到的,每个窗口小部件都希望将父窗口传递给构造函数。这使得 Qt 框架能够在移除窗口小部件树时处理整理和释放内存。QObject(这是所有 Qt API 的基础对象)跟踪其子对象,因此,在删除时,也可以删除其子对象。这使得复杂窗口小部件层次结构的创建和删除更容易正确处理。要使用此功能,您应该始终记住将父对象传递给窗口小部件的构造函数(以函数开头的 Go 函数 New…),尽管传递 nil 可能看起来像是在工作。
信号和插槽

Qt 类似于 GTK +,这是一个事件驱动的框架,广泛使用信号来处理事件管理和数据通信。在 Qt 中,这个概念分为信号和插槽; 信号是事件发生时产生的信号,信号是接收信号的信号。设置插槽以接收信号的动作称为连接,这导致在调用其连接信号时调用插槽功能。在 Qt 中,这些是类型化事件,意味着每个信号都有一个与之关联的类型参数列表。定义信号时,此类型已设置,并且任何希望连接到信号的插槽都需要具有相同的类型。
s.ConnectMySignal(
func(msg string) {
log.Println(“Signalled message”, msg)
}
)
信号和插槽是 Qt Designer 生成的高级用户界面,是处理多线程应用程序的推荐方法。信号可以从后台线程触发,并且用户接口代码可以将该信号连接到其自己的插槽,实质上是监听信号。当信号触发时,任何相关数据(信号参数)将从一个线程传递到另一个线程,因此可以在 GUI 更新中安全使用。
由于 Qt 是对 Qt API 的轻量级绑定,因此特定于 Go 的文档很少,但您可以在 Qt 的博客文章中找到有关 Qt 设计和官方文档中提供的所有类的更多信息。

正文完
 0