VLC源码分析-新知识
通过 VLC Media Player 开源项目了解到一些自己未知的知识。
1.GNU gettext 为程序的国际化i18n和本地化l10n提供了很好的支持。 https://www.gnu.org/software/gettext/
可以使用文本编辑或POedit来修改.po文件,添加相应的翻译语句。 https://github.com/vslavik/poedit
TODO: 编写文章介绍、了解如何使用及代码例子
VLC 源码分析:VS2013 编译 VLC 源码
前提准备
在 GitHub 上有人已经弄好可以使用 VS 2013 编译 vlc-2.2.6.32 版本的代码
https://github.com/sunqueen/vlc-2.2.6.32-2013
所以,这就要安装 vs2013_update4(可以到 i tell you 下载,这里提供我下载的 ed2k )
Windows 10 最新 SDK
编译 & 调试
Tiled 源码分析:编译
介绍
Tiled 是一个 2D 级别的编辑器,可帮助您开发游戏内容。它的主要功能是编辑各种形式的平铺地图,但它也支持免费的图像放置以及功能强大的方式来注释游戏使用的额外信息的水平。
Tiled-introduction
源码
github-tiled
编译
使用 QtCreator 打开 tiled.qbs Build & Run
VLC 源码分析:序
为了了解 VLC Media Player 如何使用 Qt 创建 UI
C++ 编译器介绍
GCC(GNU Compiler Collection)
官方网站: https://gcc.gnu.org
GCC 有 Windows 移植版本,比较出名的就是 MinGW 和 TDM-GCC。
GNU 编译器套件(GNU Compiler Collection)包括 C、C++、Objective-C、Fortran、Java、Ada 和 Go 语言的前端,也包括了这些语言的库(如 libstdc++、libgcj 等等)。GCC 的初衷是为 GNU 操作系统专门编写的一款编译器。GNU 系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。
llvm+Clang
LLVM 官方网站:http://llvm.org
Clang 官方网站:http://clang.llvm.org/get_started.html
LLVM 是构架编译器(compiler)的框架系统,以 C++编 写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并 ...
Qt实战-Qt SendMessage 进程通信
名词解释
PostMessage 是 Windows API(应用程序接口) 中的一个常用函数,用于将一条消息放入到消息队列中。并且不会等待响应的线程处理消息,而是直接返回。(简单的理解就是异步)。
而 SendMessage 作用一样,但是会等待结果返回(同步)
我们先来看 PostMessag 函数的原型:
hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:
HWND_BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、 被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口
NULL:此函数的操作和调用参数 dwThread 设置为当前线程的标识符 PostThreadMessage 函数一样
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
LParam:指定附加的消息特定的信息。
返回值:如果函数调用成功,返回非零,否则函数调用返回值为零
接收的时候,使用 QT5 中的方法是 在接收的类中,重新实现 nativeEvent()(Qt4的时候使用的是 winEvent(),从 Qt5 开始,就使用 nativeEv ...
Qt问题-namespace
Namespace declaration lacks Q_NAMESPACE macro
Qt 5.15+ 发现这个问题,Qt 5.9 ~ Qt 5.12 都没有这个问题
https://bugreports.qt.io/browse/QTBUG-68611
解决方案
123namespace E { Q_NAMESPACE }
Qt问题-序
记录在使用 Qt 过程中遇到的一些问题及解决办法。
Qt问题-指针变量传参问题
问题1:在操作过程中指针被释放了
QTreeWidgetItem *treeItem = treeWidget->currentItem(); 被别的类保存了一份(比如一个表格渲染任务保存了当前渲染的 treeItem),在渲染完成后还想要对 treeItem 做一些别的操作,此时 treeWidget 由于某些原因或操作被重新加载了(treeItem 被清除了),但是当前渲染的 treeItem 还要操作(比如获取数据 treeItem.data(xx) data(xx) 内部的某些变量地址就会显示 0xffffffffffxxxxxx)就会引起程序崩溃。
指针变量传参问题-测试例子
操作顺序:btn1 -> btn2 -> btn1 -> btn3
当再次按下 btn1 后,重新加载树控件数据,此时 m_item 已经被释放了。
btn3 操作里用到了已经被释放的 m_item,从而引起程序崩溃。