Qt QQuickView调整大小时的视觉错误/闪烁

时间:2015-02-19 16:08:16

标签: c++ qt qml

我正在尝试将一些QML / Qt Quick 2元素集成到Qt 5.4 c ++应用程序中。到目前为止,我已经能够在Qt窗口内完全按照我想要的方式显示我的QML元素,但我在随机时间遇到一些闪烁和类似的视觉错误,特别是在调整窗口大小或QML元素改变颜色时。当我的QML代码独立运行时,我没有遇到这样的问题。这个问题有没有明显的解决方案?

该错误的确切性质是“topbar”元素显示堆叠在“菜单栏”元素的顶部几分之一秒。如果调整窗口大小或者说QML视图中的元素改变了颜色,则会更频繁地发生这种情况。

main.cpp中:

QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();

mainwindow.cpp

QStackedWidget * mainStackWidget = new QStackedWidget();

//Init of QML TopBar widget
QQuickView *topBarView= new QQuickView();
topBarView->setResizeMode(QQuickView::SizeRootObjectToView);
topBarView->setSource(QUrl("qrc:/TopBar.qml"));
QWidget *topBarWidget = QWidget::createWindowContainer(topBarView);
topBarWidget->setMinimumSize(1024, 150);

//Init of QML menu widget
QQuickView *menuView = new QQuickView();
menuView->setResizeMode(QQuickView::SizeRootObjectToView);
menuView->setSource(QUrl("qrc:/SideBar.qml"));
QWidget *menuWidget = QWidget::createWindowContainer(menuView);
menuWidget->setMinimumSize(1024, 500);

//Setting the layout
ui->verticalLayout->addWidget(topBarWidget);
mainStackWidget->addWidget(menuWidget);
ui->verticalLayout->addWidget(mainStackWidget);
centralWidget()->setLayout(ui->verticalLayout);

1 个答案:

答案 0 :(得分:0)

在拆开我自己的程序后,很明显顶部QML元素中的“Progressbar”元素导致了视觉错误。设置更多Progressbar的设置(例如下面的示例)解决了几乎所有的故障视觉效果,尽管我不知道为什么。

ProgressBar {
    value: slider.value
    style: ProgressBarStyle {
        background: Rectangle {
            radius: 2
            color: "lightgray"
            border.color: "gray"
            border.width: 1
            implicitWidth: 200
            implicitHeight: 24
        }
        progress: Rectangle {
            color: "lightsteelblue"
            border.color: "steelblue"
        }
    }
}