2

我目前正在嵌入式 Linux(ARM Cortex A9)上使用 Qt 5.0.2 进行项目。

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

我用 C++ 编写了一个简单的视图控制器,它隐藏()/显示() QML 视图和 QWebView 的许多实例。

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

我尝试了几种方法:

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

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

- 在显示视图之前尝试通过 rootObject() 更新()不同的对象。

在切换到 c++ 视图后,有没有人有提示让 QML 视图再次起作用?

感谢。

4

1 回答 1

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;
   }
}
于 2015-04-09T19:59:58.537 回答