搬家中。。。请关注 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实现翻转效果。Qt是一个强大的跨平台应用程序开发框架,而QML是其内置的一种声明式语言,用于构建用户界面。在这个实例中,我们将关注如何利用QML创建一个具有翻转效果的列表...
在开发跨地域的应用程序时,...总的来说,Qt 和 Qml 提供了一套完整的解决方案来处理多国语言支持,无论是在传统的 C++ 界面还是现代的 Qml 界面设计中,都能够灵活地实现动态翻译,从而让应用能够更好地服务全球用户。
在Qt中,多媒体模块(multimedia)为开发者提供了处理音频、视频以及摄像头功能的接口。 1. **Qt多媒体模块(Multimedia Module)** Qt多媒体模块是Qt库的一部分,它提供了丰富的功能来处理媒体内容。在这个工程中...
Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用WebEngine展示的百度ECharts图表Demo Qt/QML使用...
总的来说,"qt/qml MediaPlayerDemo"是一个学习和实践如何在Qt中使用QML和QtMultimedia开发多媒体播放器的好例子。通过这个项目,你可以了解到QML的声明式编程,以及Qt框架在多媒体处理方面的强大能力。
【基于Qt/QML的微博客户端源码】是一个利用Qt框架,特别是其QML(Qt Quick)模块开发的应用程序,用于实现对新浪微博的访问。这个项目结合了Qt C++、QML和JavaScript三种技术,旨在创建一个跨平台的微博客户端。通过...
在Qt6的QML环境中,开发人员可以利用强大的QML语言来构建用户界面,并通过与C++的交互来处理底层系统功能,如文件I/O操作。本示例源码主要展示了如何在QML中进行文件读写,为QML应用程序提供更丰富的功能。 **一、...
在本文中,我们将深入探讨Qt6中的QML网络设置,特别是关于Web Sockets的应用。Qt6是Qt框架的最新版本,提供了丰富的功能和性能优化,而QML是Qt的声明式用户界面语言,使得UI设计变得直观且高效。在Qt6 QML中,Web ...
QT/QML是一种强大的图形用户界面开发框架,尤其适用于创建丰富的、动态的可视化应用。在这个案例中,我们将深入探讨如何利用QML实现一个粒子系统来创建一个动态的爱心效果。粒子系统在游戏开发和视觉设计中广泛应用...
在本文中,我们将深入探讨如何在Qt框架下利用QML(Qt Quick)开发日历控件。QML是Qt提供的一种声明式语言,用于构建用户界面,它与C++结合,使得开发高效、灵活且美观的应用程序变得轻而易举。 标题"Qt-Qml-...
《Qt6 QML Book》是一本深入探讨Qt6框架中QML和C++结合使用的专业书籍,其中包含了大量的示例源码供读者学习和实践。Qt6是Qt框架的最新版本,提供了许多改进和新特性,尤其是在QML方面,使得用户界面设计变得更加...
最近工作中遇到一个奇怪的问题: 本来想在 TextEdit ( QTextEdit ) 中捕获一下键盘按键按下的事件。 然而,当输入法为英文时( 正常输入字符 ),可以捕获到按键事件,但当我切换到中文时,弹出输入法选框后,却...
在"Qt6 QML Book/扩展QML/使用FileIO示例源码"中,开发者可以学习到如何在QML中与本地文件系统进行交互。QML本身并不直接支持文件I/O操作,但可以通过与C++的结合,利用C++的文件操作功能来实现。具体来说,我们可以...
在本文中,我们将深入探讨如何使用Qt和Qml实现一个具有历史编辑器功能的应用程序,该编辑器支持历史搜索和关键字匹配。这个编辑器能够帮助用户快速查找和访问过去的输入记录,通过类似搜索引擎的关键字排序功能,...
QML是一种用于设计用户界面的声明式脚本语言,主要基于Qt框架。它允许开发者用简洁的语法构建动态、流畅的界面。《QmlBook》作为一本关于QML的教材,涵盖了QML的基础知识、高级技巧、以及与其他技术的整合方法。 在...
在本文中,我们将深入探讨如何使用Qt6 QML进行多媒体播放,特别是针对视频播放的示例源码。Qt6是一个强大的跨平台应用程序开发框架,QML是其的一部分,用于构建用户界面,它允许以声明性的方式描述UI。当我们谈论...
《QmlBook》_QT5_中文版是针对Qt5框架中的QML技术编写的一本教程,主要聚焦于使用QML进行用户界面设计和开发。QML,全称Quick Markup Language,是Qt的一个重要组成部分,它允许开发者用声明式语言来创建富图形用户...
在提供的示例源码"Qt6 QML Book/动态QML/跟踪动态对象示例源码"中,我们可能会看到以下几个关键知识点: 1. **对象的动态创建**:在QML中,可以通过JavaScript代码来动态创建新的QML元素。例如,可以使用`Component...
- **Qt图像效果库**:介绍Qt提供的图像效果库,及其如何与QML结合使用。 #### 九、多媒体 ##### 10. 多媒体 - **媒体播放**:介绍如何在QML中播放音频和视频。 - **声音效果**:讲解如何添加和控制音效。 - **视频...