Я немного stucked с созданием раскрывающегося списка, основываясь на QAction
помещается в QToolBar
У меня есть файл XML с следующими данными:Выпадающее кнопку в QToolBar с изменяющимися полями
<cfg>
<fields>
<group name="First fields">
<field>filed1</field>
<field>filed2</field>
<field>filed3</field>
</group>
<group name="Second fields">
<field>filed4</field>
<field>filed5</field>
<field>filed6</field>
... etc ...
</group>
</fields>
<button name="MyButton1" />
<button name="MyButton2 />
... etc ...
</cfg>
NB : Я не знаю, сколько полевых групп будет, так же как и я не знаю, сколько будет кнопок.
Итак, прежде всего, я анализирую следующий XML-файл и извлекаю необходимые данные.
Для каждого button
Я создаю свой собственный QAction
и добавьте его в существующую панель инструментов.
Позже я создаю QMenu
для каждой кнопки и заполняю ее QAction
s для каждой группы и поля. У меня есть QAction
для First fields
, field1
, field2
и т.д ...
Тогда для каждого button
я использую setMenu
метод и добавлять создаваемое меню там.
Если я запускаю свое приложение, я вижу свои кнопки на панели инструментов с раскрывающимися меню, и они выглядят так, как я ожидал.
Проблема в том, что мне нужно добавить некоторые функции к этим кнопкам.
Я бы хотел, чтобы пользователь мог их проверить (я использую setCheckable
для всех QActions
) и снимите флажок. Когда пользователь проверяет действия с именем группы, все поля, относящиеся к этой группе, становятся проверенными и так далее.
Как я не знаю, сколько кнопок и полей у меня будет при запуске, становится трудно работать с сигналами и слотами.
Это заставляет меня использовать QMap
для хранения всех адресов созданных QAction
, когда сигналы из этих полей испускаются, а затем используют метод find для поиска действий, которые его выбрали, и только они выполняют необходимое действие.
Вопрос в следующем: есть ли лучший способ достичь моей цели, или я должен продолжать использовать этот подход?
Звук хороший. На самом деле, я сделал то же самое, но вместо этого использовал QMap. – tema