现在的位置: 首页 > 综合 > 正文

两篇关于Qt && Light House && Wayland的文章转载

2018年06月06日 ⁄ 综合 ⁄ 共 4157字 ⁄ 字号 评论关闭

第一篇

 

原文地址:http://blog.csdn.net/dbzhang800/archive/2011/06/05/6526535.aspx

 

Lighthouse 是什么东西?一直不太清楚...

  • 第一次注意到它是 android-lighthouse 这个东西出来时,很多人在欢呼
  • 第二次注意到它是 看到cuteqt博客中的转载的一篇关于 Qt Lighthouse & Wayland 的博客

  • 第三次注意到它是 Qt5 的路线图中(各个平台的界面移植将基于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 即:Q t  P latform  A bstraction

#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就不同了,它是个动画,所以会生成一系列图片。

参考

 

 

原文地址:http://www.cuteqt.com/blog/?p=2125

转载:Qt Lighthouse & Wayland

 

原文: Qt Lighthouse & Wayland Posted on 2011/03/23 by csslayer

Lighthouse是QtGui的一个Window System Agnostic移植(使得QtGui不了解它在什么窗口系统上运行,把处理逻辑交给了Lighthouse的插件)。

Lighthouse 直到前段时间还没有的一个特性是它没有提供在服务器和客户端同时运行Qt时的多进程的解决方案,这对于嵌入式设备是很重要的。虽然现在Qt当中有 QWS(开发嵌入式Qt程序时使用的一个窗口系统,类似X Windows的C/S结构,从而保证Qt程序的的可移植性)。但是QWS并不是一个正式的协议,从而使得QWS的服务器和客户端是紧密耦合的。

因此如果有一个现成的协议可以利用的话,就会省下Qt开发者的不少功夫,然后他们最终发现Wayland(严格说来Wayland也是一个协议)正是他们所需要的。

在过去的几个月里Qt的几名开发者都在研究Wayland,然后他创建了一个新的实验室项目Qt-Compositor,这个项目的目标是作为一个基础层让其他人完成他们自己的Wayland compositor。Qt-Compositor抽象了所有Wayland Compositor所需要的通信。

其实我想很多人关心的重点其实就是Qt现在也有一个可以demo下的Wayland支持啦。虽然开发者们更多提到的是嵌入式系统,大概也就是想让Lighthouse替代以前的QWS,Wayland在Qt嵌入式的下一步也有着重要的作用。

Lighthouse在去年10月底的时候决定和Qt的master合并,评论里面不少人其实在催xcb支持(X的c语言绑定),后面也回复有xcb现在也正在开发中。lighthouse看来将成为Qt的移植性/跨平台的下一步。

来源:

http://labs.qt.nokia.com/2011/03/18/multi-process-lighthouse/

关于wayland的介绍,我就扔两篇tualatriX的blog了做参考了:

http://imtx.me/archives/1573.html

http://imtx.me/archives/1574.html

抱歉!评论已关闭.