Используйте модель в качестве источника для QMenu

Я создал модель, которые перечисляют существующие конфигурации (скажем, она перечисляет "файлы", поскольку это действительно не имеет значения здесь). До сих пор это работает хорошо при присоединении к a QListView.

Пример:

--- ListView ---
- file #1      -
- file #2      -
- file #3      -
- file #4      -
----------------

Действительно ли возможно использовать ту же модель для динамично обновленный QMenu ?

Что-то как:

Menu
-> Submenu #1
-> Submenu #2
-> File-submenu
  -> file #1
  -> file #2
  -> file #3
  -> file #4
-> Submenu #3

Короче говоря: есть ли любой способ создать список динамично обновленного QActions (сгруппированный в то же QMenu) в зависимости от модели (полученный из QAbstractListModel) ?

5
задан ereOn 23 August 2011 в 21:26
поделиться

3 ответа

Если ваша цель - просто обновить актоны меню с текстом элементов, которые доступны в QAbstractListModel, то ответ - да.

Вот способ...

Индекс отдельного элемента можно получить с помощью следующей функции.

QModelIndex QAbstractListModel::index ( int row, int column = 0, 
const QModelIndex & parent = QModelIndex() ) const   [virtual]

С полученным индексом данные можно получить с помощью,

 QVariant QModelIndex::data ( int role = Qt::DisplayRole ) const

Затем текст, имеющийся в индексе, можно получить с помощью,

QString QVariant::toString () const

Теперь с полученным QString можно добавить действие в меню.

QAction * QMenu::addAction ( const QString & text )

Главное, в чем вы должны быть уверены, это то, что вы должны иметь возможность пройтись по всем элементам в Модели, чтобы получить индекс каждого элемента. Надеюсь, это поможет.

1
ответ дан 14 December 2019 в 13:26
поделиться

Нет. Модели могут использоваться только с представлениями в соответствии со структурой Model-View , которую использует Qt.

0
ответ дан 14 December 2019 в 13:26
поделиться

Чтобы ответить на ваш короткий вопрос, да, есть. Но вам придется написать его самостоятельно.

Легкой частью будет создание подкласса QAbstractListModel.

Сложной частью будет создание собственного представления. Qt позволит вам создать собственное представление, точно так же, как если бы вы создали собственную модель, но это станет намного сложнее, поскольку вам придется обрабатывать все самостоятельно.

Это вполне выполнимо для определенной цели, но это также намного больше работы, чем я думаю, вы хотите. Так что, как говорил Женя, фреймворк Qt с моделью представления не предназначен для использования таким образом.

1
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: