Qt QQuickView 视觉错误/调整大小时闪烁
Qt QQuickView visual bug / flickering on resize
我正在尝试将一些 QML/Qt Quick 2 元素集成到 Qt 5.4 c++ 应用程序中。到目前为止,我已经能够在 Qt window 中完全按照我的意愿显示我的 QML 元素,但是我在随机时间遇到一些闪烁和类似的视觉错误,尤其是当 window调整大小或 QML 元素更改颜色时。当我的 QML 代码本身是 运行 时,我没有这样的问题。这个问题有什么明显的解决方案吗?
该错误的确切性质是 "topbar" 元素在几分之一秒内堆叠在 "menubar" 元素之上显示。如果调整 window 的大小或者说 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);
拆开我自己的程序后,很明显顶部栏 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"
}
}
}
我正在尝试将一些 QML/Qt Quick 2 元素集成到 Qt 5.4 c++ 应用程序中。到目前为止,我已经能够在 Qt window 中完全按照我的意愿显示我的 QML 元素,但是我在随机时间遇到一些闪烁和类似的视觉错误,尤其是当 window调整大小或 QML 元素更改颜色时。当我的 QML 代码本身是 运行 时,我没有这样的问题。这个问题有什么明显的解决方案吗?
该错误的确切性质是 "topbar" 元素在几分之一秒内堆叠在 "menubar" 元素之上显示。如果调整 window 的大小或者说 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);
拆开我自己的程序后,很明显顶部栏 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"
}
}
}