如何为运行时构建的菜单正确设置通用QT操作?

时间:2013-01-22 17:49:09

标签: c++ qt qt4

我正在从xml文件中的条目填充系统托盘图标菜单(QMenu),该文件在我的应用程序启动时读取。

我不确定如何正确设置行动的SLOT结束:

QList<CMenuItem> menuItems = m_layout->getMenuItems();   
QListIterator<CMenuItem> iter(menuItems);
while (iter.hasNext())
{
    CMenuItem menuItem = iter.next();    
    QAction *action = new QAction(menuItem.qsTitle, this);
    connect(action, SIGNAL(triggered()), this, SLOT(launchMenuItem()));
    trayIconMenu->addAction(action);
}

我的“launchMenuItem()”SLOT如何知道触发了哪个菜单项?我不能为每个菜单项制作一个SLOT,因为我不知道在运行时间之前会有多少项存在。

我可以想到一些丑陋的方法,但我正在寻找正确的方法。

1 个答案:

答案 0 :(得分:1)

我通常使用QAction::setData(const QVariant&)来存储我需要的任何操作ID。然后在插槽方面,我使用QAction::data()检索ID并相应地表现。 请注意,QVariant显然接受的不仅仅是基本的int(我用来识别操作),您可以传递任何QVariant - 兼容的信息。

编辑:哦!顺便说一下,这有些丑陋,因为我利用QObject::sender()来强制触发动作。对不起,但无论如何都可行。