Qt在不同平台上的安装

Qt在不同平台上的安装

image
  • 来源 | 愿码(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下载网站将正确检测平台并提供简单的运行安装程序。下载文件后,您应该使其可执行,然后运行它:

在Linux上,您需要使安装文件可执行并运行它

这将像在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终端:

为therecipe / qt绑定执行qtsetup脚本

此过程完成后,绑定应该可以使用了。如果您遇到错误,那可能是因为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 Hello on Linux
在macOS上运行

在此阶段,二进制文件可以在具有安装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设计和官方文档中提供的所有类的更多信息。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容