在C ++和QML之间切换视图时的奇怪行为

时间:2013-08-09 12:32:33

标签: c++ qt qml qt5 qwebview

我目前正在使用嵌入式Linux(ARM Cortex A9)上的Qt 5.0.2开发一个项目。

主要的UI界面是用QML开发的,但是我需要能够隐藏这个视图以直接用C ++显示QWebView。

我在c ++中编写了一个简单的视图控制器,它隐藏了()/ show()QML视图和QWebView的许多实例。

隐藏/显示方法工作正常但是当我显示QML视图时,它非常不稳定。 QML对象是可见的(或不可见:p),当它们不应该,并且焦点也是错误的。对象也被绘制在错误的位置。

我尝试了几种方法:

- 每次显示QML视图时,都会初始化不同对象的焦点/可见属性。

- 每次显示视图前都使用.setSource()

- 在显示视图之前,感谢rootObject()更新()不同对象。

在切换到c ++视图后,是否有人提示让QML视图再次功能化?

感谢。

1 个答案:

答案 0 :(得分:0)

可能有更好的方法,但是,

你可能会做这样的事情(我没有测试过这个):

注意:如果插槽实现错误(数学错误),将导致无限递归。

//this code could probably be in the constructor
real widthOverHeightRatio = 2;//set this value to what you want, or what it is when user first presses shift depending on the use case.

QObject::connect(this, SIGNAL(widthChange()), this, SLOT(onWidthChanged()));
QObject::connect(this, SIGNAL(heightChanged()), this, SLOT(onHeightChanged()));

//don't forget to define these slots in the header

//implemented slots
void MyClass::onWidthChanged()
{
   if(width/height!=widthOverHeightRatio){
      height = width/widthOverHeightRatio;
   }
}

void MyClass::onHeightChanged()
{
   if(width/height!=widthOverHeightRatio){
      width = height*widthOverHeightRatio;
   }
}