В настоящее время я пытаюсь расширить наше приложение с другим стилем.
Для каждого стиля у меня есть отдельный файл qml, например определения цвета.
StyleA.qml:
import QtQuick 2.0
QtObject {
property color textColorStandard: 'black'
...
}
В моем main.qml я хотел бы загрузить правильный файл qml, основанный на свойстве программного обеспечения:
import QtQuick 2.0
Item {
id: mainPanel
....
Loader {
id: myDynamicStyle
source: Property.UseThemeA? "StyleA.qml" : "StyleB.qml"}
...
Item {
id: BackGround
color: myDynamicStyle.textColorStandard
}
}
К сожалению, этот подход не работает. Есть ли другой / лучший способ выполнить стиль?
спасибо майкл
Использование вещей, загруженных в Loader, плохо напечатано, я бы предпочел:
Сначала создайте общий компонент-предок для всех моих стилей, например:
// AbstractStyle.qml
import QtQuick 2.0;
QtObject {
property color textColorStandard;
}
Затем создайте его для создания пользовательских стилей, например:
// StyleA.qml
import QtQuick 2.0;
AbstractStyle {
textColorStandard: "blue";
}
// StyleB.qml
import QtQuick 2.0;
AbstractStyle {
textColorStandard: "green";
}
Затем используйте строго типизированное свойство в моем объекте, которое должно использовать стиль, например:
// main.qml
import QtQuick 2.0
Item {
id: base;
Component { id: compoStyleA; StyleA { } }
Component { id: compoStyleB; StyleB { } }
property AbstractStyle currentStyle : {
var tmp = (Property.UseThemeA ? compoStyleA : compoStyleB); // choose component
return tmp.createObject (base); // instanciate it and return it
}
Rectangle {
color: currentStyle.textColorStandard;
}
}
Таким образом, есть несколько преимуществ:
Вы пытались использовать это вместо этого? Загруженный объект сохраняется в свойстве item загрузчика, а не непосредственно в загрузчике.
Item {
id: BackGround
color: myDynamicStyle.item.textColorStandard
}