【问题标题】:Weird behavior when switching view between C++ and QML在 C++ 和 QML 之间切换视图时的奇怪行为
【发布时间】:2013-08-09 12:32:33
【问题描述】:

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

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

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

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

我尝试了几种方法:

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

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

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

在切换到 c++ 视图后,是否有人有提示让 QML 视图再次正常工作?

谢谢。

【问题讨论】:

  • 我试过 Qt 5.1,同样的问题。
  • 不确定这是否相关,但我在使用 Qt 5.1.0 Beta 1 的 Ubuntu 机器上遇到了一些类似的奇怪问题。尝试弹出屏幕键盘(用于触摸显示器) ,即使它的可见属性仍然为真并且按钮显示错误的渐变颜色,某些组件也会消失。这似乎是一个奇怪的错误,我会尝试检查是否已报告。

标签: c++ qt qml qt5 qwebview


【解决方案1】:

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

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

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

//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;
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多