在运行时更改 QML 小部件

Posted

技术标签:

【中文标题】在运行时更改 QML 小部件【英文标题】:Change a QML widget at runtime 【发布时间】:2014-10-28 16:27:19 【问题描述】:

有没有办法根据 QVariant 的数据类型在 ListView 中使用不同的 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】:
Item 
    width: parent.width; height: parent.height

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


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

【讨论】:

以上是关于在运行时更改 QML 小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Qt/C++ 小部件(不是 QML)从 Android 相机获取图像

在运行时动态更改 QML 主题

设备方向更改时小部件丢失数据

更改在运行时添加的 ProgressBar 的宽度

小部件可见性更改时在 MacOS 中呈现 Qt 错误表单

如何在不知道小部件的字体系列/大小的情况下更改小部件的字体样式?