qt — странное поведение при переключении представления между C ++ и QML

В настоящее время я работаю над проектом, использующим Qt 5.0.2 для встроенного Linux (ARM Cortex A9).

Основной интерфейс пользовательского интерфейса разработан в QML, но мне нужно иметь возможность скрыть это представление, чтобы отобразить QWebView непосредственно в C ++.

Я написал простой контроллер представления в c ++, который скрывает () / show () представление QML и множество экземпляров QWebView.

Метод скрытия / показа работает хорошо, но когда я показываю обратно представление QML, он очень нестабилен. Объект QML виден (или не виден: p), когда не должен, и фокус тоже глючит. Объект тоже нарисован в неправильном положении.

Я пробую несколько методов:

-Инициализируйте свойство focus / visible различных объектов каждый раз, когда я показываю представление QML.

-используйте .setSource () каждый раз перед отображением представления

-попробуйте обновить () объект diffts благодаря rootObject () перед отображением представления.

У кого-нибудь были советы, как сделать функциональное представление QML снова после переключения на представление C ++?

поблагодарить.

2

Решение

есть, вероятно, лучший способ, но,

Вы могли бы, вероятно, сделать что-то вроде этого (я не проверял это):

примечание: если реализация слота неверна (плохая математика), это приведет к бесконечной рекурсии.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]