使用模型作为QMenu的来源

ere*_*eOn 5 c++ qt model qabstractlistmodel qmenu

我创建了一个模型,该模型列出了现有配置(假设它列出了“文件”,因为这在这里并不重要)。到目前为止,将其附加到时效果很好QListView

例:

--- ListView ---
- file #1      -
- file #2      -
- file #3      -
- file #4      -
----------------
Run Code Online (Sandbox Code Playgroud)

是否可以将同一模型用于动态更新QMenu

就像是:

Menu
-> Submenu #1
-> Submenu #2
-> File-submenu
  -> file #1
  -> file #2
  -> file #3
  -> file #4
-> Submenu #3
Run Code Online (Sandbox Code Playgroud)

简而言之:是否有任何方法可以根据模型(源自)创建动态更新的QActions(分组为同一QMenu)的列表?QAbstractListModel

lia*_*iaK 2

如果您的目标只是使用 中可用的项目文本更新菜单操作QAbstractListModel,那么答案是“是”。

这里有一个方法..

可以使用以下函数获取单个项目的索引。

QModelIndex QAbstractListModel::index ( int row, int column = 0, 
const QModelIndex & parent = QModelIndex() ) const   [virtual]
Run Code Online (Sandbox Code Playgroud)

根据获得的索引,可以通过以下方式获得数据:

 QVariant QModelIndex::data ( int role = Qt::DisplayRole ) const
Run Code Online (Sandbox Code Playgroud)

然后可以通过使用获得索引中可用的文本,

QString QVariant::toString () const
Run Code Online (Sandbox Code Playgroud)

现在,使用获得的 QString,您可以向菜单添加操作。

QAction * QMenu::addAction ( const QString & text )
Run Code Online (Sandbox Code Playgroud)

您必须确保的是,您应该能够遍历 Model 中的所有项目,以便获得每个项目的索引。希望能帮助到你..

  • 我认为这不是一个好的解决方案,尽管这是公认的答案。OP 要求从模型动态更新 QMenu。如果不连接到数据大小发生变化时模型可能发出的所有可能信号,菜单将完全不同步。 (3认同)