根据对象列表自动创建菜单

时间:2019-11-13 10:33:13

标签: qt qml

我尝试重构我创建的菜单。我的Menu对象是MenuBar组件的一部分。布尔属性被传递给 main.qml 文件,该文件将它们传递给cpp代码,该cpp代码随后又将它们传递给使用点(麻烦,对吗?)。我当前使用的代码在文件 MenuDistance.qml 中。

我想要实现的是在不改变菜单外观或性能的情况下自动进行信号处理。我试图通过创建 newMenu.qml 文件来解决我的问题。我设法将QList<Config>传递到此文件,其中Config是一个cpp类,具有3个成员-QString objectNameQList<bool> objectXOnQList<QString> menuItemNames

我尝试使用Repeater对象来遍历QList<Config>对象,但是它不允许我创建Menu对象-它允许我创建仅继承自{ {1}}。我本来想改用Item,但是这样就不得不在菜单栏中为每个对象创建单独的标签,否则我就不会滚动好菜单(我不想每次都打开新窗口)我想更改设置)。此外,在我的Rectangle对象中,不止这两个名称分别为 Distance Angles QList<Config>对象。我想遍历Config对象中的所有对象,并根据 objectName 创建菜单。

有可能吗?我应该在哪里寻找答案?也许有人可以向我推荐一些网站/课程/教程/书,这些内容可以帮助我学习如何有效地使用qt和qml?

MenuRange.qml

QList<Config>

------------------------- 更新 -------------- ---------------

我创建了import QtQuick 2.7 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.3 Menu { id: root property string checkedBox: "qrc:///images/icons/material/CheckedBox.svg" property string uncheckedBox: "qrc:///images/icons/material/UncheckedBox.svg" property bool angle30on: true property bool angle15on: false property bool angle5on: false property bool range50kmOn: true property bool range10kmOn: false property bool range5kmOn: false Menu { id: distance title: qsTr("Distance") MenuItem { id: range50km text: qsTr("50 km") icon.source: range50kmOn ? checkedBox : uncheckedBox onClicked: { range50kmOn = true range10kmOn = false range5kmOn = false } } MenuItem { id: range10km text: qsTr("10 km") icon.source: range10kmOn ? checkedBox : uncheckedBox onClicked: { range50kmOn = false range10kmOn = true range5kmOn = false } } MenuItem { id: range5km text: qsTr("5 km") icon.source: range5kmOn ? checkedBox : uncheckedBox onClicked: { range50kmOn = false range10kmOn = false range5kmOn = true } } } Menu { id: angles title: qsTr("Angles") MenuItem { id: angle30 text: qsTr("30\xB0") icon.source: angle30on ? checkedBox : uncheckedBox onClicked: { angle30on = true angle15on = false angle5on = false } } MenuItem { id: angle15 text: qsTr("15\xB0") icon.source: angle15on ? checkedBox : uncheckedBox onClicked: { angle30on = false angle15on = true angle5on = false } } MenuItem { id: angle5 text: qsTr("5\xB0") icon.source: angle5on ? checkedBox : uncheckedBox onClicked: { angle30on = false angle15on = false angle5on = true } } } } 文件,该文件现在可以半自动创建菜单 。我必须手动创建NewMenuRange.qml组件(我使用cpp中定义的Menu函数从Config文件的列表中选择main.qml对象,但是它会创建Q_INVOKABLE自动。我不知道该怎么办,是如何仅在MenuBarItem的情况下更新图标源:

checkedBox === true和所有model.menuXOn[index] === false

NewMenuRange.qml

model.menuXOn[i>index]

0 个答案:

没有答案