Qt on Android 核心编程

Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!

安晓辉 著  

ISBN 978-7-121-24457-5

2015年1月出版

定价:65.00元

444页

16开

编辑推荐

当Qt跨界牵手Android,移动开发会有什么不同?初学者如何借助Qt开发Android应用?跟随CSDN博文大赛冠军foruok进入Qt on Android无秘之旅!

内容提要

《Qt on Android 核心编程》以“从零开始也能学会Qton Android开发”为目标,基于最新的Qt SDK 5.2,从Qt基本机制讲起,帮助读者建立Qt开发的概念;介绍信号与槽、各种GUI控件、布局管理器等各种Qt基础主题,同时辅以简洁有效有针对性的实例程序;有了使用Qt开发的基础后,作者进一步将重点转移到安卓平台,详细介绍Qt on Android的开发环境搭建、APK部署、APK调试等基础性的主题,然后深入讲解Qt onAndroid是如何在Java的世界中发生的,最后着重讲述Qt on Android的各种针对移动开发的技术主题,控件、布局、文件处理、XML、网络、多线程、按键、触摸、感应器、多媒体,为读者顺利在Android(安卓)平台开发提供深入浅出的指南。

《Qt on Android 核心编程》首先是一本介绍Qt程序设计技术的书籍,其次是讲述如何在移动平台Android上使用Qt框架进行开发的书籍。对于Qt技术感兴趣的读者,无论是专注于传统的桌面软件开发,还是希望尝试使用Qt在Android平台开发,都可以从《Qt on Android 核心编程》中获得最根本、最重要的知识与实例。《Qt on Android 核心编程》既适合有一定C/C++语言基础、希望开发跨平台应用的开发人员,又适合希望开发安卓应用的C/C++开发人员,以及想了解Qt开发的人员。

目录

第1章  Qt概览     1

欢迎来到Qt的世界,让我们看看Qt是什么,能给我们带来什么,又有谁在使用Qt。我们要约会的Qt on Android,它缘起何处,有着怎样曲折婉转的历史,如今的小模样能否让我们爱之如狂……

1.1  什么是Qt  1

1.2  我们能用Qt做什么     1

1.3  谁在使用Qt  1

1.4  什么是Qt on Android  2

1.5  Qt on Android的前世今生     2

第2章  Qt开发环境快速上手     6

当你遇见了合适的人,开始筹划第一次约会,又是兴奋又是惆怅,要不要买花,去哪里买礼物,穿什么衣服,洒什么香水,带什么应对意外的小物件,该不该了解可能要去的地方环境如何……一切都为了顺利地完成这事关紧要的第一次。我精心准备了Qt入门的一切,微笑着欢迎你的来访。

2.1  Qt Creator简介     6

2.2  Qt Creator下载与安装     7

2.2.1  下载     7

2.2.2  安装     7

2.3  创建第一个项目:Hello World  9

2.4  Qt Creator集成开发环境介绍     13

2.4.1  欢迎界面     13

2.4.2  编辑界面     16

2.4.3  调试界面     17

2.4.4  项目选项设置     18

2.4.5  菜单简介     19

2.4.6  Qt Creator的选项配置     21

2.4.7  项目模板介绍     22

2.5  Qt开发工具介绍     25

2.5.1  Assistant  25

2.5.2  Designer  29

2.5.3  Linguist  30

2.5.4  命令行环境     30

第3章  Qt on Android快速上手     32

风,起于青萍之末,升降于云际本土,志高远而固磐。Qt跨界牵手Android,带给我们一种新的可能与希冀,这种欣欣然还需落到实处,从准备环境开始,从第一声Hello开始,学会必要的调试手段,向着部署向着发布而去……

3.1  开发环境搭建     32

3.1.1  JDK安装     32

3.1.2  环境变量设置     34

3.1.3  Android SDK安装     36

3.1.4  Android NDK安装     41

3.1.5  Apache Ant安装     41

3.1.6  Qt Creator的Android环境配置     42

3.1.7  AVD创建     44

3.1.8  连接你的手机     46

3.2  Hello Qt on Android  47

3.2.1  创建项目     47

3.2.2  项目选项     50

3.2.3  创建密钥文件和证书     53

3.2.4  创建AndroidManifest.xml 55

3.2.5  添加代码     53

3.2.6  运行程序     55

3.3  Qt库的部署策略     57

3.3.1  Use Ministro service to install Qt  58

3.3.2  Bundle Qt libs in APK  59

3.3.3  Deploy local Qt libraries to temporarydirectory  60

3.4  日志     62

3.4.1  为什么要有日志     63

3.4.2  在Qt中如何使用日志     63

3.4.3  如何把日志输出到Android日志系统中     64

第4章  Qt项目文件介绍     67

有些顶顶重要的,却总被忽视,pro文件就是那个悲催的备胎啊,满含深情一路追随着你,你却只在受伤时想起它值得珍惜。噢,没关系,你看我十八般武艺万种风情,只默默地在你身边伫立,期待着你书到用时回眸一笑。

4.1  pro文件介绍     67

4.1.1  注释     68

4.1.2  组件选择     68

4.1.3  目标文件名     68

4.1.4  模板     69

4.1.5  指定源文件     69

4.1.6  指定头文件     70

4.1.7  设置头文件路径     70

4.1.8  指定库与库文件路径     70

4.1.9  定义宏     70

4.1.10  配置信息     71

4.1.11  代码块与条件测试     72

4.1.12  变量     74

4.2  pro.user文件     75

4.3  pri文件     75

4.4  Makefile  75

第5章  Qt入门     76

我们扔掉了纸尿裤,走出了Qt的第一步,兴奋地挥舞着小手颠颠儿着跑起来了,身边那些花儿,招呼一声吧。你好,QWidget;你好,QLabel;你好,QPushButton;你好,亲的信号与槽;你好,布局管理器……你看,它们回应你了,仿佛在说,你若安好,便是晴天。

5.1  Hello World再分析     76

5.2  QuitApp:带交互的小程序     77

5.3  初识信号与槽     79

5.4  构建复杂界面     80

5.4.1  盖洛普Q12测评程序     80

5.4.2  创建自己的槽     85

5.4.3  布局管理器介绍     85

5.4.4  控件回顾     88

5.5  追随Qt的代码风格     91

第6章  元对象系统     92

Qt的根基就在元对象系统,唯有修好内功,各种招式方可如臂使指,信手拈来。就让我们抽丝剥茧,以无刃入有间,看看signals、slots、emit、SLOT、SIGNAL这些Qt的繁花,就让我们跟着moc走上一遭,就让我们看看信号如何唤起阿槽,就让我们练练事件与过滤器的绝招……

6.1  牡丹花示例     93

6.2  再论编译过程     95

6.3  Q_OBJECT宏     96

6.4  QMetaObject  97

6.5  关键字signals、slots、emit、SIGNALS、SLOTS  97

6.5.1  signals  97

6.5.2  emit  98

6.5.3  slots  98

6.5.4  SIGNALS  98

6.5.5  SLOTS  98

6.6  moc的魔法     99

6.6.1  moc_peony.cpp的源码     99

6.6.2  moc的工作清单     101

6.6.3  信号的真容     101

6.6.4  信号与槽的约会     102

6.7  深入理解信号与槽     107

6.7.1  信号与槽原理     107

6.7.2  如何使用信号与槽     108

6.7.3  信号与槽的连接类型     109

6.7.4  信号与槽经验谈     110

6.7.5  跨线程使用信号与槽     110

6.8  属性系统     114

6.8.1  静态属性     114

6.8.2  动态(运行时)属性     117

6.9  事件和事件过滤器     118

6.9.1  重写event() 119

6.9.2  重写特定事件处理器     120

6.9.3  事件过滤器     120

6.9.4  自定义事件     122

6.10  定时器事件     124

6.10.1  使用QTimer  125

6.10.2  使用QObject::startTimer  125

6.11  对象树与生命周期     126

6.12  智能指针     131

6.12.1  QPointer  131

6.12.2  QSharedPointer  132

6.12.3  QWeakPointer  133

6.12.4  QScopedPointer  134

6.12.5  QObjectCleanupHandler  135

6.13  动态类型转换     136

6.14  国际化     136

6.14.1  字符串国际化方法     137

6.14.2  创建译本     138

6.14.3  装载译文文件     138

6.14.4  运行时改变语言     138

第7章  Qt模板库介绍     140

你离不开的,不只有空气、网络、微信、智能手机,还有接纳千言万语的QString,还有环环相扣的QList,还有你侬我侬的QMap,以及那些胸有千千壑可容万万对象的容器们。

7.1  使用QString  140

7.1.1  初始化一个字符串     141

7.1.2  操作字符串数据     141

7.1.3  字符串查询     142

7.1.4  编码转换     142

7.1.5  格式化输出     143

7.2  容器类     143

7.2.1  QList示例     144

7.2.2  QMap示例     146

第8章  Qt GUI编程     148

阿里巴巴进入了四十大盗的山洞,里面都有什么宝贝呢?单选按钮复选框,行编辑与分组框,列表和表格,文本框携手选项卡……你总是说,我要更多还要更美,QPainter会给你画笔,给你颜色,给你想不到的美好。

8.1  智能手机GUI特点     148

8.2  内建窗口控件介绍     149

8.2.1  QRadioButton  149

8.2.2  QCheckBox  150

8.2.3  QGroupBox  150

8.2.4  QLineEdit  152

8.2.5  QTextEdit  153

8.2.6  QTabWidget  154

8.2.7  QListWidget  155

8.2.8  Qt资源文件系统     158

8.2.9  QTableWidget  160

8.3  自定义窗口部件     166

8.3.1  使用QPainter绘图     166

8.3.2  为Android实现的ImageButton  167

8.3.3  文字渐变标签     169

第9章  多线程     174

上路吧,线程,请引领我们进入并行世界,那骑着单车看夕阳的时代已只堪怀念。低阶的QThread赐予我们强大的控制力,它的事件循环会开启潘多拉的盒子,跨线程的通信如此美丽。QThreadPool省却了我们繁重的手工,而QtConcurrent则在高屋建瓴,势必让我们使用并发不费吹灰之力。

9.1  上路吧,线程     174

9.2  线程自己的事件循环     176

9.3  岂能老死不相往来——线程间通信     177

9.3.1  跨线程的信号与槽     177

9.3.2  跨线程的事件     178

9.3.3  门铃示例程序     178

9.4  线程同步     182

9.5  使用QThread的注意事项     184

9.6  QThreadPool 184

9.7  高阶多线程API:QtConcurrent   185

第10章  网络编程     189

互联网的蓬勃发展从1995年开始,距今已有将近20年。2008年6月,iPhone 3G发布,开启移动互联网新纪元,距今已有7年。网络已经成为我们感知世界的重要神经元。在Qt的世界里,QNetworkAccessManager让网络连接与访问变得一致而简单,而QTcpSocket与QUdpSocket则为你扫清了socket的纷繁复杂,让你可以优雅地打造你的专属服务。

10.1  QNetworkAccessManager  189

10.1.1  http编程     190

10.1.2  ftp编程     198

10.2  QTcpSocket/QTcpServer  201

10.2.1  服务器     203

10.2.2  客户端     205

10.3  QUdpSocket  207

10.3.1  服务器     207

10.3.2  客户端     209

第11章  文件IO    211

我想要有个家,一个不需要华丽的地方,在我疲倦的时候我会想到它。在计算机的虚拟世界,那些在内存中运行的应用软件,它们有一个不变的根,就是文件。原始的文件操作艰涩难懂,而Qt提供的QFile、QTextStream、QDataStream这IO三剑客,化复杂为简单优雅。

11.1  QFile  211

11.2  QTextStream    214

11.3  QDataStream     215

第12章  XML  217

1998年2月,XML标准正式出炉,从此我们可以用它对文档和数据进行结构化处理,各种文件格式方言鱼龙混杂浮云蔽日的时代渐行渐远。多么美好的时代,Qt提供了DOM、SAX、StAX三种常见的XML处理模式,热情地支持我们说同一种语言。

12.1  XML读取与解析     217

12.1.1  DOM    218

12.1.2  SAX  219

12.1.3  StAX  223

12.2  XML文档生成与保存     226

12.2.1  QXmlStreamWriter  226

12.2.2  QDomNode::save() 227

12.2.3  疯狂原始人的方式     228

第13章  Qt on Android揭秘     229

也许你已经寻寻觅觅寻不到,Qt on Android的讯息。其实我一直在灯火阑珊处等你,现在就让我们点燃火把,做一回武陵捕鱼人,去寻桃花源。我们不仅要亲历Qt on Android应用的诞生过程,还要陪着它穿越JNI的逼仄入口,来到豁然开朗、美池桑竹各有其属的Qt王国。

13.1  APK是怎样炼成的     229

13.1.1  当你“运行”时     230

13.1.2  Android项目目录结构     232

13.1.3  string.xml介绍     233

13.1.4  AndroidManifest.xml介绍     233

13.1.5  libs.xml介绍     238

13.1.6  Androiddeployqt.exe都干了什么     239

13.2  Java与Qt的结合过程     242

13.2.1  应用入口     242

13.2.2  通信代理     245

13.2.3  QPA插件     248

13.3  Qt应用的状态     252

第14章  Android移动开发主题     253

江湖之远,庙堂之高,各有其运行规则。移动开发这片新天地,让我们不得不重新审视自己:怎么处理BACK键,如何回应纤纤玉指多情的触摸,怎样在传感器的迷宫中穿梭,面对拍照的需求能否响应,在水一方的伊人想玉笛暗飞声我们要不要十二万分热情地支持……

14.1  按键处理     253

14.1.1  重写keyPressEvent/keyReleaseEvent  254

14.1.2  给子控件安装事件过滤器     255

14.1.3  应用级别的事件过滤器     256

14.2  触摸与手势     258

14.2.1  触摸     258

14.2.2  手势     263

14.3  传感器与手势     264

14.3.1  常见传感器介绍     264

14.3.2  Qt传感器手势类库介绍     268

14.3.3  摇动手势     268

14.3.4  覆盖手势     269

14.3.5  自由落体     269

14.3.6  缠绕手势     269

14.3.7  翻转手势     269

14.3.8  扇动手势     270

14.3.9  传感器手势的使用     270

14.4  拍照     271

14.4.1  QCamera和它的小伙伴     271

14.4.2  QCameraViewFinder  273

14.4.3  QCameraImageCapture  273

14.4.4  使用相机拍照     274

14.4.5  在QML应用中使用相机     277

14.5  录音与回放     278

14.5.1  录音类库     278

14.5.2  播放类库     279

14.5.3  录音与回放小示例     279

第15章  使用JNI扩展你的应用     286

Qt强则强矣,雅则雅矣,毕竟也有力不能及之时,所谓天长地久有时尽,不应有恨月常圆。Qt为Android准备了QAndoidJniObject和QAndroidJniEnviroment两枚神器,借助它们,你就可以提升你的念力,请来Android平台的诸位神仙样人物帮你完成看似不可能的任务。

15.1  使用JNI Environment  286

15.2  调用Java代码     287

15.2.1  Java方法签名     288

15.2.2  调用Java方法     289

15.2.3  extendsQtWithJava实例     291

15.2.4  QtAndroid名字空间     298

15.2.5  使用手机外部存储     298

15.3  Java调用C++  299

第16章  纸上得来终觉浅,绝知此事要躬行     305

历15章之漫长,终于可以携剑下天山,就让我们红尘作伴,活得潇潇洒洒,策马奔腾,共享人世繁华。音乐,图片,笔记,拍照与美图,天气,查IP剖Json,这些,所有这些应用的出生与成长,我们将共同经历,一路上有你,苦一点也愿意……

16.1  笔记qnotepad  306

16.1.1  首页设计与实现     308

16.1.2  笔记对象     316

16.1.3  笔记浏览与编辑     318

16.2  图片浏览器     324

16.2.1  文件选择控件     324

16.2.2  图片加载器     335

16.2.3  图片显示     344

16.3  IP地址查询     351

16.3.1  Json数据格式简介     352

16.3.2  Qt中的Json类库     352

16.3.3  程序详解     353

16.4  音乐播放器     358

16.4.1  云想衣裳花想容——Qt样式表     359

16.4.2  多媒体类库介绍     361

16.4.3  音乐播放器详解     362

16.5  天气预报     380

16.5.1  云中谁寄锦书来——GPS定位     382

16.5.2  天气查询与显示     387

16.6  拍照与后期处理     396

16.6.1  方寸天地纳缱绻,楚楚蕴秀薄纸间     398

16.6.2  图像处理算法     401

16.6.3  图片加载与显示     410

16.6.4  组织部长     413

附录A  常见问题     420

参考文献     427

前言

为什么写作本书

2008年,我开始在CSDN网站写技术博客。在此之前,我的理想是写出受人待见的小说来,我也曾经在网络论坛上笔耕不辍获得一些成绩,也曾经发表过一些散文以及小说。而那一年,当我再次拾起笔来写东西时,却选择了技术。这个世界上,唯一不变的就是变化,随性如我,什么都能接受,理解不了就接受,不想接受的也接受,目标达不成也可以接受,于是技术博客写了几个月不想写了,也说服自己接受了,看起来什么都无所谓的样子,不过我并不喜欢杨坤的《无所谓》这首歌。

2013年接近年底的时候,我决定重新开始撰写技术博客。这次是经过了理性的思考,而不是2008年那时的一时兴起率性而为。

2013年的时候,我感到自己的脑容量开始变小,从前做项目时用到的很多技术慢慢地随风远去,终于渐行渐远渐无书,费尽思量也难以述说了。难道是迭代周期变短了吗?难道是我这台机器开始老化了吗?这个时候我能够回忆的,仅仅是当初学习某项技术时曾经遇到过挫折困顿彷徨犹豫,曾经辗转反侧寤寐思服,再无其他,我不想这样:年老时蹲在门槛上,唯一可以回忆的,就是年轻时曾经掌握了8种语言,开发过100款软件,回顾我的技术之路,就卡在“想当年……”这一句上。

正如卡夫卡说过的那句“任何障碍都可以粉碎我”一样,某些简单的问题总能把人绊倒,资深的技术人员总不能理解为什么会这样。其实他忘了自己曾经走过同样的路,罗素说的对,参差多态乃幸福本源,但我们都太善于以己度人、以己绳人了。

学习过程的艰辛,日积月累的渐悟或刹那之间的醍醐,随着岁月的流逝,终会成为遥远而模糊的回忆;而你当初大惑不解屡次跌倒的坑洼,学成之后看起来是那么“不可思议”,以至于你忘了曾经这样走过,不能理解别人为何总在一个地方犯错。的确,谁会在一再跌倒的地方做上记号,永志不忘?谁会把推敲再三的心得分门别类整理成文,开源给后学者以使其免蹈覆辙?事实上我从未想主动忘记自己半路出家初学编程的痛苦,但子在川上曰,逝者如斯夫,淡忘总在发生,而我们依旧前行,如果不予以记录,岁月的风霜雪雨终将掩埋你曾走过的路。所以,写文章这件事,更多是为了自己,记下亦是放下,却又可在想用之时根据记下的随时唤醒沉睡的经验记忆,对别人或又能解其困惑,利己利人之事,何乐不为?

所以我决定重新开始技术博客的更新之旅,既可以识别自己的学习模式,固化已有的经验,形成系统的知识体系,又可以温故知新,增益知识的广度和厚度。而本书的写作正是缘起于我博客上的文章,不能不说是一次意外之喜。我愿意在有限的时间内不计代价地完成本书,这是我个人的兴趣所在。一个人总应该在某个时候有某件事,让你全力以赴地去完成,不计成败,不想得失,你所有的动力,就仅仅是你喜欢,你情愿把它做好。

致谢

第一个要感谢的,是发现我的编辑高洪霞老师,没有她,我很难有途径寻找这么一个机会回顾自己也惠及他人。在我的写作过程中,高老师给了我许多关切、鼓励和具体的建议,对于本书的完成具有至关重要的意义。

我要特别感谢本书的文字编辑巩樱老师,她和本书初稿中的代码、文本格式、笔误、错漏等进行了艰苦的斗争,取得了巨大的成果。

还要感谢出版社及为本书付出辛勤劳动的其他编辑,没有你们的辛苦付出和鼎力帮助,本书绝难顺利付梓出版。

接下来要感谢的,是我的老婆赵建媛女士,尽管她担心本书可能不会大卖,担心我天天熬夜的辛苦可能白费,她还是毫不犹豫地支持我,在精神上和行动上都给予了我强有力的鼓励和帮助。写作本书期间,我心心念念只有书稿,对其他事情要么浑浑噩噩要么简单粗暴,给她带来了很多精神上的困扰和实际生活上的压力,但她依然微笑着陪我前行。没有老婆的支持,实在难以想象我可以一个人完成一部书这样一项浩大的工程。

另外还要感谢我美丽可爱的女儿安悦瑄小朋友,四岁多的她还不明白写书是什么概念,但她还是很自豪地向她的小伙伴们宣告说她的爸爸正在写书。能够做一件让女儿感到爸爸很棒的事情,我觉得非常开心。写书这段时间我很少陪女儿玩耍,对此我深感不安,在这里向她说一句,亲亲我的宝贝,爸爸马上出关了。

特别鸣谢:上海Qt开发联盟(QQ群号279906625)的群友们给了我很多鼓励和支持,在与他们的交流中频受启发获益良多。

必须感谢所有在我写作期间对我嘘寒问暖、给予我帮助的朋友们,是你们让我觉得世界如此温暖。

最后,也最应该感谢的,是肯花费时间和精力阅读本书的读者,你们的意见和建议,我会视若珍宝。

这本书适合谁

本书首先是一本介绍Qt程序设计技术的书籍,其次是讲述如何在移动平台Android上使用Qt框架进行开发的书籍。对于Qt技术感兴趣的读者,无论是专注于传统的桌面软件开发,还是希望尝试使用Qt在Android平台开发,都可以从本书中获得最根本、最重要的知识与实例。

如果你刚接触Qt,希望能快速入门,本书第2章提供了图文并茂的环境搭建教程、简洁实用的Qt Creator集成开发环境介绍、各种开发工具的快速使用指南以及详细到令人咋舌的入门项目创建过程。同时,笔者也在第5章进一步介绍了Qt的布局管理器,在第8章扼要讲述了可以在桌面和Android两个平台上同时使用的Qt Gui控件,这些可以作为基础教程。

如果你已经使用Qt开发过桌面软件或者嵌入式软件,现在想在Android平台上小试牛刀,那就赶快行动吧。本书以“从零开始也能学会Qt on Android开发”为目标,在第3章首先详细讲述JDK、Android SDK、Android NDK、环境变量设置、安卓虚拟设备创建、手机连接等一切可能给你入门带来障碍的内容,然后以Hello Qt On Android为基础,不厌其细地讲述如何创建支持Android平台的项目、如何配置Android相关的项目选项、如何部署Qt on Android应用,力求使你觉得“原来一切这么简单啊”,最后又介绍如何在Android上使用Qt及Android的日志系统、如何使用adb过滤应用日志,以备你在开发过程中遇到问题时不再为调试问题发愁。在第13章,笔者深入Qt on Android内部,一步一步为你揭开Qt何以能够在Android平台运行的秘密,让你做个明白人。当然,如果你对此不感兴趣,可以跳到第14章开始看,那里有移动开发的各种主题。第15章是笔者为你准备的进阶利器,以便你需要呼叫Android系统为你的应用助拳时有路可循。至于第16章,则是本书所介绍内容在Android平台的大阅兵,你不但会看到Qt传统的各种技术(如网络、XML、Qt Widgets、文件IO、Json、QTL、事件过滤器等)如何在Android平台上跃马扬鞭,也会看到传感器、录音、多点触控等移动开发技术的实际应用,还会看到JNI的实作,产生原来我不是一个人在战斗的感觉。

如果你对Qt的信号与槽念兹在兹,想知其然而后知其所以然,本书能够充分满足你的需要。笔者始终认为,信号与槽是Qt框架最有特色的内容,是一切Qt重要技术的基石,因此笔者在第5章和第6章先后多次从不同角度进行了讲述,既涵盖了信号与槽的各种典型使用场景,也抽丝剥茧剖析了信号与槽的原理,甚至不厌其烦花大量篇幅讲述了Qt元对象系统,为的就是让你从“大概知道怎么用”的阶段提升到“了然为什么这么用”的境界。

很多开发者在实际的项目开发中经常使用多线程,我曾经在网络上看到太多的人对Qt多线程编程感到迷惑,提出了各种各样的问题,尤其是当信号与槽遭遇多线程,不得不说的故事就数不胜数了,难免让人感叹不幸的问题各有其不幸。而本书的第6章、第9章可以带领你走出泥淖。

好吧,如果你对Qt的网络编程(第10章)、Qt模版库如何使用(第7章)、Qt的XML技术(第12章)感兴趣,本书也不会让你失望。

哦?你希望介入Qt的事件处理流程?没问题,第6章的第9节就是为你准备的,看了它你就可以掌握Qt事件处理的七种武器,想拦谁就拦谁,为所欲为。

你需要什么技术基础

Qt是基于C++的开发框架,大量使用面向对象概念,诸如继承、虚函数、重载、纯虚类等,如果你从未接触过C++,笔者还是建议你先了解C++和面向对象编程,否则本书可能会打击你学习新技术的信心。如果你已接触过C++但不是十分熟悉,没关系,遇到不明之处翻阅C++书籍即可,我想这应该不会影响对本书内容的理解。

如果你有C++基础但从未接触过GUI编程,不要担心,Qt虽然是基于事件机制的,但它良好的封装使得你可以从Qt开始你的第一个GUI应用。

如果你想在Qt中通过调用Java代码来获得使用Android系统功能的特权,那你可能需要一点Java语言和Android编程的基础。不过没有也没关系,如果你熟悉C++,学习并掌握Java语言的基础部分是十分容易之事,而Android应用开发的很多概念和模式又和Qt相通……

你需要什么软硬件环境

笔者使用Windows 7作为开发环境,可供参考。

至于开发主机的硬件配置,笔者建议配置为:

双核以上CPU

4GB以上内存

而为了验证Qt on Android应用在手机上的效果,还需要一部Android手机,系统版本在2.3以上。建议配置为:

Android系统4.0及以上

内存1GB以上

4GB以上闪存或加配SD卡

为了连接电脑和手机进行安装与调试,需要:

一根与手机匹配的数据线

与手机匹配的ADB驱动

本书术语表

作者在写作本书的过程中,不可避免地引用了部分英文术语以及缩写,为不引起歧义,有必要把它们界定一下。

IDE:Integrated DevelopmentEnvironment,集成开发环境,如Qt Creator,Visual Studio等。

GUI:Graphical UserInterface,指采用图形方式显示的计算机操作用户界面。笔者行文过程中有时使用其简写GUI,有时以图形用户界面指代,有时我也用UI替代GUI。

Application Framework:你可以理解为它是一个拥有诸多应用开发所需的基本功能(如程序模型、网络、XML、GUI组件等)的类库,开发人员只要从其中撷取符合自己需求的模块,就可以像搭积木一样完成自己的应用。我在书中有时称其为应用框架、应用开发框架,视上下文环境而定。

API:Application ProgrammingInterface。系统或应用框架开放出来,给程序员使用的接口,就是API。它可以是C函数那样的东西,也可以是C++类,还可以是信号……

Android:一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。比较常用的中文对应词是安卓和安致。本文多数时候直接使用Android一词,有时使用安卓,有时还以Android指代开发它的公司和组织,视上下文而定。

SDK:Software DevelopmentKit,软件开发工具包。广义上指辅助开发某一类软件的相关文档、源码、范例和工具的集合,比如QtSDK,Android SDK……

NDK:Native Development Kit,本书专指Android NDK,与SDK类似,它是Android提供的一系列工具、文档、源码、范例的合集,帮助开发者快速开发C/C++的动态库,并能自动将so和Java应用一起打包成APK。

APK:Android Package,即Android安装包。APK文件其实是.zip格式,但后缀名被修改为apk,它包括编译过的Java代码、配置文件、图片、字符串等资源,你可以认为它是与Windows下的msi、Red Hat Linux的rpm包、Ubuntu的deb包类似的东西。本书多数时候直接使用APK这个缩写,有时也会用APK指代Android应用。

Widget:这个很难翻译,多数时候我直接使用英文单词本身,在讲述Qt应用框架时,我有时用控件指代Widget。也有人将Widget翻译为微件、窗口小部件……在Android上,Widget有其专门含义,特指由应用提供的显示在桌面上的小部件。

AVD:Android Virtual Device,中文对应的名字,叫安卓虚拟设备、虚拟机、模拟器等,笔者有时用AVD,有时用模拟器。

MFC:Microsoft FoundationClasses,微软基础类库的简称。

Activity:Android的应用程序组件,一般用活动一词来指代它。你可以简单地这么理解:一个Activity拥有屏幕上的一个可见窗口,能够处理各种用户事件,对用户操作做出响应。

联系作者

我非常乐意和本书的所有读者沟通,接受您对本书以及对我的指正和建议。本书涉及的案例源代码下载地址:http://www.broadview.com.cn/24484。

本书缘起个人博客,得到很多朋友的关注和鼓励。欢迎您访问我的技术博客,留下您对书籍内容本身或某个技术专题本身的指正和建议。我的博客地址:http://blog.csdn.net/foruok

笔者目前担任CSDN Qt论坛的版主,您可以到那里找笔者讨论技术问题。您可以按下面的路线抵达那里:http://bbs.csdn.net-->移动开发-->Qt。

笔者的电子邮箱是foruok@163.com,欢迎来信讨论与书籍相关的问题,如果要求我为您解决技术问题,哈哈,先给钱,按时计费哦。

 

 

 

相关推荐

涵盖从Java 5到Java 11所有重要特性,让Java学习不再难!

曾经,网络上流传着这样一套视频,无数学员通过这套视频学会了Java,进入了软件开发领域~~这套视频就是“Java无难事”。如今,为了方便大家更好地学习,也跟上当前Java发展更新的步伐,作者基于之前的视频内容,做了更新和完善,在广度和深度上进行了扩展,并继承“让Java学习再也不是难事”的思想,推出了新书《Java无难事》。—— 从Java5到Java11 ——Java,这门编程语言界的常青树,凭借着简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 ,深受程

博文视点(北京)官方博客 5019

离开大厂为什么会“返贫”?比《逆行人生》更真实~~

近期热播的电影《逆行人生》讲述了曾经的互联网大厂中层高志垒,因意气用事成为了“家里蹲”,却没想到人生从此“开入逆行道”的故事!电影播出后陷入巨大争议,不少人认为这部电影在消费苦难,刻意把一个人的生活拍得那么无辜、受害~~一个高设定的中产家庭真的能落魄到这种地步吗?抛开电影中主角的具体经历,在现实中,确实有不少离开大厂“返贫”的怪现象!那么,大厂“返贫”到底有哪些不为人知的底层逻辑呢?《大厂之外》作者刘飞老师就此采访了互联网行业的“老炮儿”、见证过很多离开大厂盲目折腾的真实案例的沈浩翔老师,让我们一

博文视点(北京)官方博客 1247

首部顶级AI科学家创作的纯正科幻小说,一个元宇宙和AI时代的全新科学幻想!

自2023 年起,深度学习和大模型的浪潮,终于超脱学院里形而上的争论,展示了它大规模改变现实世界的可能性,而改变的方式,可能和我们的想象完全不同。在这个新的时代中,每个个体的“独一无二”不再是与生俱来的,而是需要把握先机,以极大的勇气去开辟的。当平静的生活被诡谲的彗星所打破,当艰难的抉择关系到人类的命运,当虚拟世界成为最后的避风港,在无解的阳谋之下,顶尖的头脑们如何破局?在此背景下,很多事情都会发生变化,人的价值体系和价值评判方式,人和人之间的互动模式,人和人之间的相互关系,都将产生巨大的改变。

博文视点(北京)官方博客 1351

如何构建一个大模型?看完你就知道了!

第 7 章和第 8 章围绕大语言模型的应用和评估开展介绍,包括将大语言模型与外部工具和知 识源进行连接的 LangChain 框架、大语言模型在智能代理及多模态大模型等方面的研究和应用情 况,以及传统的语言模型评估方式、针对大语言模型使用的各类评估方法。例如:提示词:复旦大学有几个校区?强化学习(Reinforcement Learning,RL)阶段根据数十万用户给出的提示词,利用前一阶段训练的奖励模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。

博文视点(北京)官方博客 2018

爆火的无人驾驶萝卜快跑,背后有哪些隐忧?

就在不久前的上海世界人工智能大会上,澳大利亚科学院院士、新南威尔士大学教授托比·沃尔什,在出席“人工智能新进展与社会科学的未来”论坛时指出,要深入研究人工智能发展给人类带来的影响,尤其是在就业方面,并不是所有工作人工智能都做得比人类好,在谋划未来、创意工作和提供情绪价值等方面,人类具有不可取代的优势。不得不说,现在的人工智能技术,特别是那些超大的智能模型,简直就是坐上了火箭,嗖嗖地往前冲,对经济、社会还有咱们的日常生活,影响大得不得了!人工智能的发展必然会带来生产力的提升,对劳动力的替代也是必然的。

博文视点(北京)官方博客 2005

人类警惕!AI是个大骗子!

幸运的是,医学界拒绝了辛顿的建议,继续培训新的放射科医生。我认为,如果你是一名放射科医生,你就像那只已经跑到悬崖边缘的郊狼,因为还没有往下看,所以它没有意识到脚下已经没有路了。书中从图灵的梦想开始,谈到人机共存的未来,娓娓道来,深刻且生动有趣。从关于人工智能中的“人工”这一讨论中,我们可以得出一个最终结论,那就是在人类智能中的“人”可能是我们与我们正在制造的能力越来越强的人工制品的机器之间最重要的区别。我对那些人,尤其是从事人工智能和道德规范工作的员工表示同情, 他们似乎受到了不成比例的影响。

博文视点(北京)官方博客 1438

大模型时代的基础架构,大模型算力中心建设指南重磅来袭!

在这个例子中,成本为100元的T恤是最畅销商品,成本为80元的T恤是高毛利商品,它们的区别在于前者内在的原料价值创造了最畅销商品,带来了更高的性价比,而后者外在的思想价值创造了高毛利商品。这类商品不会有很强的需求和很大的销售量,但毛利率很高。在最畅销商品和高毛利商品的“挡拆”战术中,一旦客户与最畅销商品发生接触,就是高毛利商品赚取利润的最佳时机,因为客户会将二者进行比较。最畅销商品和高毛利商品并不是两类单独的商品,即新奇商品、流行商品、基本商品和专业化商品中的任何一个都同时包含最畅销商品和高毛利商品。

博文视点(北京)官方博客 1352

程序员“计算机之子“的职场反思

Winter 是我认识的最有传奇性,也最有趣的程序员之一。他在前端工程师领域颇有知名度,是 JavaScript 专家,主要的作品是 Weex 框架。如果在搜索引擎中搜 Winter,会出来一个看似没头没脑的“计算机之子”的称呼。这是因为他的生日是 10 月 24 日,正好是“程序员节”(1024 是 2 的 10 次方)。Winter 从小就用机器码编程了,那个年代还是用打孔纸的。从哈尔滨工程大学毕业后,他加入微软亚洲研究院,后来加入过 “人才辈出”的盛大创新院,又在 2012 年加入了阿里巴巴,职

博文视点(北京)官方博客 1935

红队实战宝典之内网渗透测试

本书是以内网攻防中红队的视角编写的,从内网的基础攻击原理出发,讲解红队的攻击思路和主流渗透测试工具的使用方法,旨在帮助安全行业从业人员建立和完善技术知识体系,掌握完整的后渗透流程和攻击手段。由于本书的编写初衷是为具有一定基础的渗透测试工程师和红队人员梳理常用技巧,所以,本书主要通过命令和工具介绍各种内网渗透测试方法,同时分析了一部分工具的工作原理。一场真实的、有目的的网络攻击,通常包括对业务的控制、修改和对数据的获取等,而对业务的攻击,一般都是通过本书介绍的方法拿到权限后展开的。

博文视点(北京)官方博客 1773

端午节,来看看这本应景的“龙舟书”吧!

如果你曾经尝试过使用AI工具,但是始终没有找到能够助力自己工作生活的地方,或者只停留于简单的问答,于是就慢慢放下了,那么这本书或许可以帮你看见使用AI工具的真正魅力,让你掌握ChatGPT的高阶玩法,看到它的更多应用场景,真正让它成为为自己赋能的AI助手!比如第四章的编程提效部分,或许你会用AI生成片段代码,但通过龙舟书的案例,你会了解到如何用AI实现一个模块、甚至实现项目级开发的操作逻辑和具体方法。在23年3月,我们也成立了自己的AI社群"AI俱乐部",也是在这个时期,我们全公司都加入了AI赛道!

博文视点(北京)官方博客 1043

100倍增长的背后:华为IPD实施20年

不仅有严谨的理论和方法阐述,更大量剖析了经典商业公司产品的成功案例,阐述了他们成功的背后逻辑是如何反应了IPD的本质,同时也基于大家司空见惯的日常商业案例进行了分析,让读者更容易理解IPD关于产品的业务本质和商业经营的核心。华为坚持IPD变革20多年,不仅构建了产品研发领域的世界级竞争力、更是开启了从此持续变革的序幕,培养了一大批熟知变革方法的干部队伍和企业文化,让华为尝到了变革的甜头,从此华为就开始不断革自己的命、直到今天也未有停止过。华为创始人任正非说过:华为没有成功、只有成长和对常识的遵守。

博文视点(北京)官方博客 1497

被众多AI大佬看好的具身智能到底是什么?它凭什么成为下一个AI浪潮?

通过比较智能体和具身智能,我们不仅能够更好地理解具身智能的独特性和价值,而且看到了一个全新的视角:智能是如何通过与环境的互动来发展和适应的。具身智能理论让我们想起人类自身的特性,我们的智能不仅来源于大脑的思维过程,还深深根植于我们的身体及我们与外部世界的交互。具身智能的核心观点是,认知和智能行为是大脑、身体、环境相互作用的结果,体现了智能体通过物理互动来学习和适应环境的能力。感知与交互:智能体的感知和交互很有规律,而具身智能喜欢与环境实时互动,它的感知和行为是在不断变化的环境中进行的。

博文视点(北京)官方博客 2481

数字经济 + 人工智能最大的商业机会不是在互联网上……

因为,今天中国农业已经不仅仅涉及单一的种养殖的事情了,还涉及农业组织、土壤问题、种业研发、种植技术、植保技术、采收技术、品控技术、深加工、营销及IP 打造、全渠道运营、物流供应链、文化赋能、一二三产融合、产业资本、政策配套等,同时还涉及农村产业结构、返乡创业、农民老龄化、新农人培养、产业转型升级等。(2) 家庭农场带动的一二三产融合模式 :城市周边的乡村,是很难实现规模化的农业的,如果单靠第一产业,很难支撑农业的发展,稳定种地农民的心,要一二三产融合发展,才能在同一片土地上,实现不同商业模式的收益。

博文视点(北京)官方博客 1428

亿级流量下通用的高并发架构设计

Proxy收到业务服务的数据库操作请求后,根据请求中的SQL语句进行归类,将属于写操作的请求(如insert/delete/update语句)转发到数据库Master,将属于读操作的请求(如select语句)转发到数据库任意一个Slave,完成读/写分离的路由。数据库承受的高并发请求压力,主要来自读请求。我们可以把数据库按照读/写请求分成专门负责处理写请求的数据库(写库)和专门负责处理读请求的数据库(读库),让所有的写请求都落到写库,写库将写请求处理后的最新数据同步到读库,所有的读请求都从读库中读取数据。

博文视点(北京)官方博客 1590

豆瓣8.7分,30000人都在阅读的量化用户体验实操书全面更新!

这些示例中的行为、态度和情感都是可以被度量的。来自不同专业和领域的关注如何提高用户体验的人将会从本书获益,包括可用性和用户体验专业人员、交互设计师、信息架构师、服务设计师、产品设计师、Web 设计师和开发人员、软件开发人员、平面设计师,以及市场营销和市场研究专业人员,还有项目和产品经理等。这本书适用于任何对改进不同类型产品或服务的用户体验感兴趣的人,无论这些产品是消费类产品、计算机系统、应用程序、网站、服务,还是其他任何类型的物品,只要是人使用的产品,就可以度量与使用该产品有关的用户体验。

博文视点(北京)官方博客 1230

一本书了解AI的下一个风口:AI Agent

随着技术的飞速发展,我们正站在一个新的转折点上,AI Agent(AI智能体,简称智能体)作为AI技术发展的新风口,正逐渐揭开神秘面纱,预示着一个全新的智能时代到来。它们将不再是被动的执行者,而是我们生活中的主动参与者,可以理解我们的语言,预测我们的需求,并在多个任务中提供个性化的帮助。智能体将不再是单一功能的应用程序,而是能够跨平台、跨任务的智能伙伴,可以根据我们的需求和偏好,提供更精准和更高效的帮助。我们需要制定相应的法律法规,确保智能体技术的发展在伦理和法律的框架内进行,并加强监管,保护用户的权益。

博文视点(北京)官方博客 1118

一本书精通推荐算法,轻松搞定入门、面试、进阶

精通推荐算法:核心模块+经典模型+代码详解》一书主要介绍推荐算法技术,覆盖召回、粗排、精排和重排等模块,目的是让读者熟悉推荐算法的全部链路,加深体系化理解,并掌握关键技术细节。它能帮助你掌握推荐算法的整体架构、每个核心模块的知识框架,以及一些工作必备的经典模型,同时,能帮助你深入理解它们的出发点和具体实现方案,在实际工作中融会贯通。同时,推荐系统链路很长,包括召回、粗排、精排和重排等诸多模块,如何掌握整体架构,并深入每个模块理解其细节,就成为一件困难且重要的事。(3)模型经典,代表性强。

博文视点(北京)官方博客 1287

一本书了解AI的下一个风口:AI Agent

随着技术的飞速发展,我们正站在一个新的转折点上,AI Agent(AI智能体,简称智能体)作为AI技术发展的新风口,正逐渐揭开神秘面纱,预示着一个全新的智能时代到来。它们将不再是被动的执行者,而是我们生活中的主动参与者,可以理解我们的语言,预测我们的需求,并在多个任务中提供个性化的帮助。智能体将不再是单一功能的应用程序,而是能够跨平台、跨任务的智能伙伴,可以根据我们的需求和偏好,提供更精准和更高效的帮助。我们需要制定相应的法律法规,确保智能体技术的发展在伦理和法律的框架内进行,并加强监管,保护用户的权益。

博文视点(北京)官方博客 1160

野心、梦想与科幻——浅谈外星殖民与软件工程

这本书完美融合价值和创新的软件架构选择,旨在让业务决策者和技术团队成员学会通过协作来清晰地理解自身在战略层面面临的问题,并确定理想的架构制定方法,无论该方法是分布式微服务、模块化良好的单体,还是介于两者之间的粗粒度服务。软件架构专家Vaughn Vernon和Tomasz Jaskuła展示了如何基于需求和目标做出平衡的架构决策,而非盲目跟风,从而聚焦于价值和创新,交付更具可演进性的系统,并避免代价高昂的错误。考虑到新的交付机制和收入模式,现有的产品可能是创新的催化剂,能够带来比昨天更大的价值。

博文视点(北京)官方博客 1672

万众期待,催更5年,《码农翻身2》强势来袭!!!

再比如,对于“编程语言的巅峰”这一节,如果你对基本的数组、条件分支、函数都不了解,就无法领略汇编语言的厉害之处。现在《码农翻身2》终于来了,之所以拖了这么长的时间,主要是因为中间“插播”了另外一本书——《半小时漫画计算机》,该书使用纯漫画的方式来讲解计算机基础知识,这对我来说是一个全新的尝试,花费了我不少的时间和精力。所以,我在写文章的时候也有意把枯燥乏味的技术包装一下,变成好玩有趣的故事,在故事中让主人公不断遇到问题,不断制造悬念,吸引大家看下去,不知不觉就把技术掌握了。

博文视点(北京)官方博客 1929

【干货来了】大语言模型训练优化秘籍

由于一次模型训练过程通常包含多轮,因此,初始数据预热占用的同步时间在整个训练过程中的占比很低,而且本地缓存不受节点数量增加的影响,可以保证每个节点具有同等的吞吐性能。这样做效率更高,性能可提升数倍。不同的分布式并行技术对通信带宽的要求不同,因此,针对不同的硬件环境,需要选择最适合的分布式并行方案,并针对不同的数据量和模型特点做针对性的优化,从而达到最好的通信效率。还有一些需要关注的 I/O 问题,如训练数据量比较大,通常有几 TB∼几百 TB,这对存储的要求比较高,既需要大存储容量,又需要高吞吐性能。

博文视点(北京)官方博客 1617

从《繁花》看图数据库的关联力!

据艾瑞咨询《2022年中国知识图谱行业研究报告》,知识图谱是二维链接的图结构而非行或列的表结构,需要以图数据的形式描述并存储,该方式能直接反映知识图谱的内部结构,有利于知识查询,并且结合图计算算法能够实现知识的深度挖掘与推理。在此背景下,图技术领域专家张晨博士基于近十多年来在图数据库技术领域的研究和实践经验,牵头编写了《图数据库:理论与实践》,为图技术爱好者提供一本即具备领域概括性、又具有专业深度、还兼顾了业务实操性的领域知识与实践手册。在市场上,尚未出现一本能够帮助图数据库爱好者从入门到精通的实践手册。

博文视点(北京)官方博客 1067

大模型的智慧之源:图技术的崛起

以创邻科技针对信用卡场景打造的智能问答平台为例,该平台通过图技术和通用大模型的协同工作,优化大模型框架的逻辑推理能力的同时拓展了其原始知识边界,让生成式回答的灵活开放性与精确性并存。在处理复杂的推理和问答任务,特别是涉及多个变量和条件的情况时,图技术可以将问题抽象为图结构,并利用图算法进行分析,有效解决复杂问题,弥补大型语言模型推理能力的不足,实现更广泛的应用和发展。与大模型相比,图技术能够更好地处理复杂的逻辑关系和多种数据结构,更全面地分析和理解数据之间的关系,提高推理和决策的准确性。

博文视点(北京)官方博客 759

Go 首次冲进前八!曾两次夺得年度编程语言,也曾跌至百名开外 | TIOBE 2 月榜单发布

本书基于Go 1.20版本编写,对Go语言的语法和使用方法进行了详尽的介绍,包括基础语法、数组、切片、映射、函数、类型、包与依赖管理、接口、反射、并发编程、泛型、测试、常用标准库和第三方库的基本原理和使用方法,并通过最佳实践案例详细讲解使用过程中遇到的常见问题和解决方法,以期帮助读者读者更好地理解Go语言的语法特性和应用技巧。想要用Go语言写出优质的软件,不仅要了解Go语言的语法,还需要对Go语言的特性、软件的通用编写方法、软件项目的组织方法、并发程序设计、软件测试、软件性能优化等方面都有一定的了解。

博文视点(北京)官方博客 1529

2024年了,是谁还在学C++11?(没错,是我)

它融合了令全球无数程序员为之迷醉的C++大师Stanley B. Lippman的丰富实践经验,注入了C++标准委员会原负责人Josée Lajoie 对C++标准的深入理解,再结合上C++ 先驱Barbara E. Moo在 C++教学方面的真知灼见,经历了语言缔造者与常青藤名校数版迭代,才锻造出了这样一本每一页都在闪闪发光的C++学习头牌!但无论如何,学习 C++11 仍然是一个有价值的投资,可以提升你的 C++编程技能,并为你在 C++领域的发展打下坚实的基础。

博文视点(北京)官方博客 1686

大模型竞速下半场,探索大模型应用的奥秘

虽然搭建Chatbot的产品方法论并没有因为以ChatGPT 为代表的大模型的出现发生本质的变化,但是在一些技术落地的实现路径中,新的技术对旧的技术确实有了一定程度的替换。只有冷静地看待人工智能的发展,理解技术周期性的变化并持续拥抱最新的技术,我们才能抓住真正的机会,做出人们期待的产品。与出版本书第1版时的情形非常相似,如今,大家对ChatGPT有和Chatbot一样巨大的误区,认为人工智能是一个纯粹的技术工程,被各种技术术语影响,忽略了商业应用中产品设计和对用户需求的理解实际上是更为重要的事实。

博文视点(北京)官方博客 1178

云联接:揭开SD-WAN神秘面纱,颠覆你对网络的认知!

如今,尽管 SD-WAN 技术在业内仍未有系统、标准的定义,但未来 WAN 传输将是软件定义的这一观点已成为业内共识:只有在应用识别能力、隧道加密能力、动态优化能力、应用可视化能力和零信任构架五大能力的支持下,一个具有商业化价值的 SD-WAN 基础服务架构体系才能形成。云联接,即世间万物中无处不在的联系、联接和联动,它是 SD-WAN 的形式化表述,包含了 SD-WAN 技术的丰富能力,是展现未来网络形态的理念。当然,不同行业的不同企业网络特性各有不同,SD-WAN的应用场景也可能大相径庭。

博文视点(北京)官方博客 846

RAG:让大语言模型拥有特定的专属知识

值得注意的是,在进行检索之前,对数据的处理也非常重要。可以发现,虽然大语言模型有上下文推理能力,但由于大语言模型存在“知识过期”和“细分领域的幻觉”这两个限制,且它会尽可能地尝试回答所有的问题,因此只是单纯地使用大语言模型是没有办法解决所有问题的,RAG正是在这个背景下应运而生的。RAG技术在Chatbot中的应用极大地提高了回应的相关性和准确性,使得处理复杂查询成为可能,并显著增强了个性化与上下文理解的能力,为用户提供了更丰富、更自然、更个性化的交互体验,推动了Chatbot技术的发展。

博文视点(北京)官方博客 2345

AI加持,openEuler打造数字基础设施全场景操作系统

通过在openEuler中引入的异构内核管理,可以在CPU和NPU通过共享页表的方式实现统一编址,使得双方可以互用内存,达成内存“透明”扩容、超分,这样可以提升推理场景吞吐量提升50%,并极大的简化内存管理的需求成本,以往多套内存接口简化为一套,异构驱动代码也能从万行下降到百行。通用的配置语言,也可以用于打造开箱即用的定制能力,支持任意YAML字段定制,适配众多格式的上游软件,而且OS支持分层定制,通过EulerMaker和EulerTest构建面向多场景的软件。“崛起数字时代,引领数智未来。

博文视点(北京)官方博客 1556

基于大语言模型LangChain框架:知识库问答系统实践

ChatGPT 所取得的巨大成功,使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括 API 集成、交互逻辑、数据存储等。为了解决这个问题,从 2022 年开始,多家机构和个人陆续推出了大量开源项目,帮助开发者快速创建基于大语言模型的端到端应用程序或流程,其中较为著名的是 LangChain 框架。

博文视点(北京)官方博客 4694
上一篇: 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)
下一篇: 我所理解的Cocos2d-x
博文视点
博文视点 企业官方账号 企业官方账号 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄20年 6869粉丝 2132原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值