Я создал модель, которые перечисляют существующие конфигурации (скажем, она перечисляет "файлы", поскольку это действительно не имеет значения здесь). До сих пор это работает хорошо при присоединении к 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
Короче говоря: есть ли любой способ создать список динамично обновленного QAction
s (сгруппированный в то же QMenu
) в зависимости от модели (полученный из QAbstractListModel
) ?
Если ваша цель - просто обновить актоны меню с текстом элементов, которые доступны в 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 )
Главное, в чем вы должны быть уверены, это то, что вы должны иметь возможность пройтись по всем элементам в Модели, чтобы получить индекс каждого элемента. Надеюсь, это поможет.
Нет. Модели могут использоваться только с представлениями в соответствии со структурой Model-View , которую использует Qt.
Чтобы ответить на ваш короткий вопрос, да, есть. Но вам придется написать его самостоятельно.
Легкой частью будет создание подкласса QAbstractListModel.
Сложной частью будет создание собственного представления. Qt позволит вам создать собственное представление, точно так же, как если бы вы создали собственную модель, но это станет намного сложнее, поскольку вам придется обрабатывать все самостоятельно.
Это вполне выполнимо для определенной цели, но это также намного больше работы, чем я думаю, вы хотите. Так что, как говорил Женя, фреймворк Qt с моделью представления не предназначен для использования таким образом.