В настоящее время я работаю над проектом, использующим 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 ++?
поблагодарить.
есть, вероятно, лучший способ, но,
Вы могли бы, вероятно, сделать что-то вроде этого (я не проверял это):
примечание: если реализация слота неверна (плохая математика), это приведет к бесконечной рекурсии.
//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;
}
}
Других решений пока нет …