我正在从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,因为我不知道在运行时间之前会有多少项存在。
我可以想到一些丑陋的方法,但我正在寻找正确的方法。
答案 0 :(得分:1)
我通常使用QAction::setData(const QVariant&)
来存储我需要的任何操作ID。然后在插槽方面,我使用QAction::data()
检索ID并相应地表现。
请注意,QVariant
显然接受的不仅仅是基本的int(我用来识别操作),您可以传递任何QVariant
- 兼容的信息。
QObject::sender()
来强制触发动作。对不起,但无论如何都可行。