把 SRT 格式的字幕文件解析为字幕的对象数组,格式为:
1  | [  | 
输出效果:

			
		
		
		  大圣,此去欲何?踏南天,碎凌霄。若一去不回…… 便一去不回!
把 SRT 格式的字幕文件解析为字幕的对象数组,格式为:
1  | [  | 
输出效果:

SpringMVC 中在任意地方取得 HttpServletRequest 和 HttpServletResponse
在 web.xml 中注册 RequestContextListener (SpringMVC 4 不需要这一步)
1  | <listener>  | 
获取 HttpServletRequest 和 HttpServletResponse
1  | public static String testRequestAndResponse() {  | 
QQ 提供了标准的 OAuth 2.0 第三方登录功能,可以按照 QQ 互联的文档 (http://wiki.connect.qq.com) 例如使用 HttpClient 进行网络访问,集成 QQ 的第三方登录到我们的系统里,也可以使用 Scribe-Java 来集成 QQ 的第三方登录,这样就会简单很多。
ScribeJava 是一个简单的 Java 实现的 OAuth/OAuth2 库。
ScribeJava Github 仓库:https://github.com/scribejava/scribejava
错误提示:
Project ERROR: Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.
解决办法:
打开 Qt_install_folder/5.7/clang_64/mkspecs/features/mac/default_pre.prf
修改
1  | isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null")))  | 
为
1  | isEmpty($$list($$system("/usr/bin/xcrun -find xcodebuild 2>/dev/null")))  | 
C++ 中比较不错的日志工具有 log4cxx,log4qt 等,但是它们都不能和 qDebug(), qInfo() 等有机的结合在一起,所以在 Qt 中使用总觉得不够舒服,感谢 Qt 提供了 qInstallMessageHandler() 这个函数,使用这个函数可以安装自定义的日志输出处理函数,把日志输出到文件,控制台等,具体的使用可以查看 Qt 的帮助文档。
Qt 使用 QNetworkAccessManager 访问 HTTP 服务,这里对其进行了简单的封装,使用流行的 Fluent 风格 API,简化 GET、POST、PUT、DELETE、上传、下载等操作。
在执行请求前设置需要的参数和回调函数:
调用 header() 设置请求头
调用 param() 设置参数,使用 Form 表单的方式提交请求,GET 请求的 query parameters 也可以用它设置
调用 json() 设置 JSON 字符串的 request body,Content-Type 为 application/json
当然也可以不是 JSON 格式,因使用 request body 的情况多数是使用 JSON 格式传递复杂对象,故命名为 json()
调用 success() 注册请求成功的回调函数
调用 fail() 注册请求失败的回调函数
调用 complete() 注册请求结束的回调函数
然后根据请求的类型调用 get(), post(), put(), remove(), download(), upload() 执行 HTTP 请求。
success(),fail(),complete()的回调函数是可选的,根据需要注册对应的回调函数,也可以一个都不注册
例如使用 HttpClient 执行 GET 请求的代码可以简化为:
1  | HttpClient("http://localhost:8080/api/rest").success([](const QString &response) {  | 
Qt 中访问网络使用 QNetworkAccessManager,它的 API 是异步,这样在访问网络的时候不需要启动一个线程,在线程里执行请求的代码。
需要注意一点的是,请求响应的对象 QNetworkReply 需要我们自己手动的删除,一般都会在 QNetworkAccessManager::finished 信号的曹函数里使用 reply->deleteLater() 删除,不要直接 delete reply。
本文的最终结果为实现调用一个函数就能访问网络:
1  | QNetworkAccessManager *manager = new QNetworkAccessManager();  |