Lighthouse 是什么东西?一直不太清楚...
事不过三,...
Lighthouse?
Qt 是一个夸平台的库(其座右铭是"Qt Everywhere"?),但是Qt底层不是夸平台的。
比如:Qt中Gui部件最核心的类是QWidget,该类除了qwidget.h 和 qwidget.cpp两个原文件外,还有
- kernel/qwidget_mac.mm
- kernel/qwidget_qws.cpp
- kernel/qwidget_win.cpp
- kernel/qwidget_s60.cpp
- kernel/qwidget_x11.cpp
- kernel/qwidget_wince.cpp
- ...
在源代码中,还有随处可见的
#if defined(Q_WS_X11)
...
#elif defined(Q_WS_MAC)
...
#elif defined(Q_WS_WIN)
...
#endif
而这一切都使得将 Qt 移植到一个新的窗口系统变的不太容易。
Lighthouse 是Qt Platform Abstraction 项目的名字,它使得将Qt移植到新的平台变得比容易。
- Lighthouse is the project name for the Qt Platform Abstraction – making it much easier to port Qt to new platforms.
还是不懂
Lighthouse 是如何做的呢?在现阶段:Lighthouse是QtGui的一个Window System Agnostic移植,它和X11、MAC、WIN在代码上处于同等地位(这样才不会影响现有代码):
-
kernel/qwidget_qpa.cpp
- kernel/qwidget_mac.mm
- kernel/qwidget_x11.cpp
- kernel/qwidget_win.cpp个
qpa 即:QtPlatformAbstraction
#if defined(Q_WS_X11)
...
#elif defined(Q_WS_QPA)
...
Lighthouse 是一个插件结构,要移植Qt到新的窗口系统,只要编写相应的插件就可以了。比如现在的插件(在$QTDIR/src/plugins/platform下):
- cocoa
- linuxfb
- wayland
- directfb
- minimal
- xlib
- ...
有问题不是,我们使用Qt4.8在linux X11桌面系统下编写程序:
- 既可以和原来一样不通过lighthouse使用X11
- 又可以通过xlib插件使用lighthouse
这是暂时的,等Qt5发布时,代码中应该就没有 Q_WS_X11 这些东西了吧。
项目仓库
在刚过去的5月份最后一天,Paul Olav Tvete在blog中宣布:Lighthouse has grown up now。这距离他关于Lighthouse的第一篇博客:Introducing New Port of Qt to Your Favourite Platform 刚刚满20个月。
这意味着:
- Lighthouse 正式成为Qt源码(Qt4.8,Qt5)中不可分割的一部分
- Lighthouse 作为一个独立的项目已经完成了它的使命
为了避免有人不小心使用Lighthouse原有项目仓库的代码,开发人员在qglobal.h文件中加入了#error这一预处理指令。
尝试QPA
既然QPA已经正式包含在Qt仓库代码中了,如何看到运行效果呢?
抓取Qt4.8或Qt5的代码
比如
git clone git://gitorious.org/qt/qtbase.git
connfigure
运行configure--help我们可以关注选项:
-qpa ................ This will enable the QPA build.
QPA is a window system agnostic implementation of Qt.
恩,加上它就够了,我自己用的参数
./configure -developer-build -qpa -opensource -nomake examples -nomake demos -nomake tests
然后运行make,等它完成
插件
默认情况下,它似乎只编译了一个 minimal 插件,我们可以切换到(注,我在linux环境下)
src/plugins/platforms/xlib
目录下,运行make来生成xlib的插件
运行例子
编译完成,可以看个例子了,先前一直没搞清楚:为什么其他人都用 examples/widgets/wiggly 这个例子来演示,直到我使用了 examples/widgets/groupbox 这个例子。
和往常完全一样,qmake 然后 make,然后运行:
$ ./groupbox
Failed to load platform plugin "". Available platforms are:
Minimal
Xlib
XlibGL
Aborted
效果出来了,运行失败!告诉我们有3个platform可用,恩,听它的
$ ./groupbox -platform Xlib
这样以来我们熟悉的界面就出来了
换一个试试,
$ ./groupbox -platform Minimal
呵呵,这次看看不到界面了,因为没有渲染到屏幕上,而是到图片中了,打开生成的output0000.png即可看到我们熟悉的界面。
由于Minimal不响应键鼠操作,而我们的例子groupbox只渲染一次,所以只有一个图片。如果选择wiggly就不同了,它是个动画,所以会生成一系列图片。
参考
分享到:
相关推荐
Lighthouse的一个Webpack插件
Lighthouse是一个PHP包,允许您从Laravel应用程序提供GraphQL端点。 它大大减少了创建模式所需的样板,它可以很好地与任何Laravel项目集成,并且可以高度自定义,让您可以完全控制数据。
Laravel开发-lighthouse Lighthouse是一个用于Laravel应用程序的模式第一个graphql包。
Wordpress Lighthouse模板
WEF_Global_Lighthouse_Network.pdf
Lighthouse Tracking System-ALG(中文版)
Lighthouse_Tracking_System_Hypereal(中文版)
使用Google的 lighthouse 从URL列表构建一组报告
python库。 资源全名:lighthouse-0.11.1.tar.gz
资源来自pypi官网。 资源全名:lighthouse-0.9.0.tar.gz
Lighthouse 谷歌插件 Google Chrome要求版本为 52 或更高版本。
lighthouse-ci, 在使用 Docker的CI中,运行 Lighthouse 灯塔 CI这个 repo 包含灯塔CI服务器的前端和后端。审计GitHub请求请求请注意:这个服务的下降是考虑英镑。 没有sla或者正常运行时间保证。 如果对运行自己的CI...
使用Docker在CI中运行Lighthouse
基于chrome的扩展,可以自动生成web优化方案 https://github.com/GoogleChrome/lighthouse/ https://developers.google.com/web/tools/lighthouse/
Lighthouse 是一个用编写的小型、快速、模块化的事件推送服务器。 服务器呈现以联合格式包装的事件源主题的层次结构。 此层次结构可用于对聊天室、大厅等进行建模,客户端可以导航这些内容以到达合适的事件源。 ...
提供一个docker-compose环境,该环境使用Prometheus从Lighthouse节点中抓取指标,并将其显示在基于浏览器的Grafana GUI中。 用法 使用$ lighthouse beacon --metrics启动灯塔节点--metrics标志对于度量是必需的。 ...
Lighthouse Testcafe-NPM套餐 是Google开发的工具,用于分析Web应用... 步骤1:在测试代码中,您需要导入testcafe-lighthouse并为灯塔扫描分配一个cdpPort 。 您可以选择任何未分配的端口。 import { testcafeAud
还包括一个软件光栅化程序,主要是作为最小API实现的示例。 快速提示/重要建议: 构建Lighthouse 2:从2020年2月开始,Lighthouse需要Visual Studio2019。基于CUDA的内核需要CUDA 11.1。 灯塔2 Wiki: : (早期...
Lighthouse Batch v7 +需要Node v12 +。 这是对Lighthouse v7 +的依赖性的要求。命令行界面用法示例npx lighthouse-batch -s https://www.bbc.com,https://housing.com或在使用前全局安装npm install lighthouse-...
Laravel开发-lighthouse-ws Lighthouse WS为带有Lighthouse包的graphql订阅提供了一个基于驱动程序的解决方案。