`
duyouhua1214
  • 浏览: 228881 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Qt/Embedded动态旋转屏幕

    博客分类:
  • QT
阅读更多

距离上次发博文已经有一段不短的时间, 很不好意思, 一直忙于Creator翻译、Qt书籍翻译, 对博文撰写有些懈怠,现在其他事情都暂告段落, 笔者决心恢复写博文的热情, 争取多记录一些Qt的经验。

今天翻看以前写的blog, 发现一篇关于QtE屏幕动态旋转的文章(俺写的,汗),结合今天碰巧看到的代码一对照, 发现原来QtE是可以支持屏幕动态旋转的, 只是上次没有发现而已!原来自己写了一篇很傻的blog还不自知… 这里只好补上一篇简单的blog以做修正。

QtE程序动态旋转的不完全实现 一文中笔者讲到QtE自带了支持旋转的gfxdriver插件“transformed”,通过编译src/plugins/gfxdrivers/transformed目录可以得到这个插件。进一步在启动程序时设置环境变量可以指定QtE载入这个插件:

export QWS_DISPLAY=transformed:::rot90:0 #rot90表示顺时针旋转90度

在QtE内部会使用QTransformedScreen这个类替代普通的QScreen进而实现屏幕旋转。
而QWSDisplay类提供了一个静态方法setTransformation, 函数原型:
void QWSDisplay::setTransformation ( int transformation, int screenNo = -1 )   [static]

这个函数就是笔者先前没有发现的宝藏! 第一个参数给0、1、2、3代表旋转0、90、180、270度。这个函数在Qt文档中隐藏得实在太深了, 如果你不是非常有目的性地去仔细查找,是不太可能留意到这个函数的。(而笔者是先看到代码才找到这个函数的文档, 其实很负责任的讲,俺觉得即使Qt文档中确实出现了这个函数的原型, 也不能说这个函数是个公开的API, 因为文档实在是太隐蔽了。。。。让人非常汗)

有几点需要注意的地方:

- 该函数只能在server程序中调用, 在client中调用有时会没有作用(笔者的测试是有时管用有时不管用,建议只在server里调用)
- 该函数的作用域是整个QtE环境, 包括server的widgets和client的widgets
- 启动server时必须加载transformed驱动, 不然调用setTransformation函数是没用的。

综上, 如果你想实现的是某个widget的旋转, 可能该方法就不适用了。笔者的建议是改用QGraphicsView或QML来实现。

来源:http://blog.sina.com.cn/s/blog_640531380100vkl2.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics