在运行时更改QML小部件

时间:2014-10-28 16:27:19

标签: qt qml qwidget qt-quick qsettings

有没有办法在ListView中根据QVariant的数据类型使用不同的QtQuick小部件?

如果我的QVariant是布尔类型,则小部件将是一个复选框。 如果是整数,则窗口小部件将是SpinBox。 如果它是QString,则窗口小部件将是TextBox。

...等...

我想使用QSettings加载/保存我的应用程序设置。

例如:

QSettings settings("userSettings.ini", QSettings::IniFormat);
setAutoUpdate(settings.value("AutoUpdate").toBool());
setAutoUpdateFrequency(settings.value("AutoUpdateFrequency").toInt());
setLastFilePath(settings.value("LastFilePath").toString());

可以通过转换推断,我的autoUpdate类型是布尔值,我的autoUpdateFrequency是整数,而我的lastFilePath是QString。我希望在“设置/首选项”对话框中填充列表,而无需硬编码并手动定位表单上的每个值。

同事的一个建议是,Javascript可以在创建时确定QVariant类型并创建新窗口小部件,将所有必要属性连接到模型,等等。我不确定这是否有用,或者这是否适合这种情况。

1 个答案:

答案 0 :(得分:0)

Item {
    width: parent.width; height: parent.height

    Loader {
       id: myLoader
       source: parent.width<200 ? "ConditionMet.qml" : "ConditionNotMet.qml"
       width: 200
       height: 100
    }

}


这是一个示例代码,您可以根据条件加载不同的模块。您可以使用相同的代码来适应您的情况。
基本上使用带条件源的加载器。