搬家中。。。请关注 nuihq.com
转载自:http://blog.rburchell.com/2011/11/avoiding-graphics-flicker-in-qt-qml.html
It’s very common when writing QML applications to write a small stub, something like the following:
int main(int argc, char **argv)
{
QApplication application(argc, argv);
QDeclarativeView view;
view.setSource(QUrl(“qrc:/qml/main.qml”));
view.showFullScreen();
return a.exec();
}
Back already? Have you figured it out? That’s right, it flickers. Horrifically.
So what causes this? By default, QWidgets are drawn parent first, with parents drawing children. When a widget is drawn, first, it draws its background, then it draws the actual content. That background proves to be a problem, in this case.
If we add the following lines to the above example, the flicker goes away, and my eyes no longer want to bleed:
view.setAttribute(Qt::WA_OpaquePaintEvent);
view.setAttribute(Qt::WA_NoSystemBackground);
view.viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
view.viewport()->setAttribute(Qt::WA_NoSystemBackground);
NB: I’m not completely sure that adding it to both the view, and the viewport is completely necessary, but it can’t harm at least. Make sure to re-set it if you change viewports.
For completeness, here’s the full, fixed example:
int main(int argc, char **argv)
{
QApplication application(argc, argv);
QDeclarativeView view;
view.setSource(QUrl(“qrc:/qml/main.qml”));
view.setAttribute(Qt::WA_OpaquePaintEvent);
view.setAttribute(Qt::WA_NoSystemBackground);
view.viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
view.viewport()->setAttribute(Qt::WA_NoSystemBackground);
view.showFullScreen();
return a.exec();
}
(If you’re curious, Qt::WA_OpaquePaintEvent basically implies that you’ll repaint everything as necessary yourself (which QML is well behaved with), and Qt::WA_NoSystemBackground tells Qt to nicely not paint the background.)
NB: on Harmattan (and Nemo Mobile) at least, make sure you always use QWidget::showFullScreen(). The compositor in use there unredirects fullscreen windows (meaning no compositor in the way), so you get faster drawing performance, and every frame counts.
相关推荐
基于PathView,Qt/QML做的一个可以无限滚动的日历控件 基于PathView,Qt/QML做的一个可以无限滚动的日历控件 基于PathView,Qt/QML做的一个可以无限滚动的日历控件 基于PathView,Qt/QML做的一个可以无限滚动的...
Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用...
我用Qt/QML开发了一个微博客户端,用到Qt C++/QML/Javascript。 目前实现了一些基本功能,可以访问新浪微博。 测试过的平台包括诺基亚塞班3系列手机、Windows以及Linux!
qt/qml粒子系统实现的爱心代码,好玩的动态显示
- 在 Qt Widgets 中实现多语言动态翻译。 - 在 Qml 中实现多语言动态翻译。 - 两个子项目,方便测试 & 学习。
主要代码QML,GridView创建的列表,在移动过程中实现代理的半翻转效果,翻转角度可根据自己需要调整;闲来无事做个效果看看,谢谢大家赏识
QML 播放器 QtMultimedia qt视频播放器 从零建立一个qt工程,播放视频文件
QT/QML 的日历控件,纯QML实现。
Qt6 QML Book/Qt C++/样板应用程序 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
为数不多的qml中文书籍,如果英文水平可以的话,可以移步到对应英文地址:https://qmlbook.github.io/
最近工作中遇到一个奇怪的问题: 本来想在 TextEdit ( QTextEdit ) 中捕获一下键盘按键按下的事件。 然而,当输入法为英文时( 正常输入字符 ),可以捕获到按键事件,但当我切换到中文时,弹出输入法选框后,却...
Qt6 QML Book/扩展QML/FileIO实现 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
Qt6 QML Book/扩展QML/使用FileIO 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
Qt6 QML Book/动态QML/跟踪动态对象 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
camera工程展示了如何使用API来捕捉静态图像或视频。
Qt6 QML Book/多媒体/播放媒体/播放视频 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
使用Qt/QML技术,做一个仿手机通讯录界面,按字母排序分组
Qt6 QML Book/多媒体/捕捉图像 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
Qt6 QML Book/动态QML/动态加载组件 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器 我的博客:http://www.cnblogs.com/csulennon/p/qml.html