2013-08-09 4 views
2

현재 임베디드 리눅스 (ARM Cortex A9)에서 Qt 5.0.2를 사용하는 프로젝트를 진행 중입니다.C++과 QML 간 전환시 이상한 행동

기본 UI 인터페이스는 QML에서 개발되었지만 QWebView를 C++에서 직접 표시하려면이보기를 숨길 수 있어야합니다.

QML 뷰와 QWebView의 많은 인스턴스를 hide()/show()하는 간단한보기 컨트롤러를 C++로 코딩했습니다.

숨기기/표시 방법은 정상적으로 작동하지만 QML보기를 다시 표시하면 매우 불안정합니다. QML 객체는 표시되지 않아야하고 포커스가 버그가있는 경우 표시되거나 표시되지 않습니다. 개체도 잘못된 위치에 그려집니다.

나는 여러 가지 방법을 시도해보십시오

의 differents의 초점/visible 속성이 매번 객체 -Initialize

내가 QML보기를 보여줍니다.

.setSource -use() 매번 differents의 뷰를 표시하기 전에() rootObject 부탁드립니다 객체) (업데이트하는보기

시러 다니구를 표시하기 전에.

누구나 C++보기로 전환 한 후 QML보기를 다시 작동하도록하는 팁이 있습니까?

감사합니다.

노트 : 슬롯 구현이 잘못된 경우 (나쁜 수학)가 발생합니다

+0

Qt 5.1에서도 같은 문제가 발생했습니다. –

+0

이것이 관련되어 있는지 확실하지 않지만 Qt 5.1.0 베타 1을 사용하는 우분투 상자에서 비슷한 이상한 문제를 경험하고 있습니다. 터치 키보드의 경우 화면 키보드를 팝업하는 동안 일부 구성 요소는 visible 속성은 여전히 ​​true이고 버튼은 잘못된 그라디언트 색상을 표시합니다. 이것은 이상한 버그로 보입니다. 이미보고되었는지 확인하려고합니다. – Avio

답변

0

아마 더 좋은 방법이지만, 당신은 아마 이런 걸 (I이 테스트를하지 않은 경우) 할 수

있다 무한 재귀에서.

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