C++ 如何为运行时构造的菜单正确设置通用QT操作?
我正在从应用程序启动时读取的xml文件中的条目填充系统托盘图标菜单(QMenu) 我不确定如何正确设置操作的插槽端:C++ 如何为运行时构造的菜单正确设置通用QT操作?,c++,qt,qt4,C++,Qt,Qt4,我正在从应用程序启动时读取的xml文件中的条目填充系统托盘图标菜单(QMenu) 我不确定如何正确设置操作的插槽端: QList<CMenuItem> menuItems = m_layout->getMenuItems(); QListIterator<CMenuItem> iter(menuItems); while (iter.hasNext()) { CMenuItem menuItem = iter.next(); QActi
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);
}
QList menuItems=m_layout->getMenuItems();
国际热核试验堆(menuItems);
while(iter.hasNext())
{
CMenuItem menuItem=iter.next();
QAction*action=新QAction(menuItem.qstTitle,this);
连接(操作、信号(已触发())、此、插槽(launchMenuItem());
trayIconMenu->addAction(操作);
}
我的“launchMenuItem()”插槽如何知道触发了哪个菜单项?我无法为每个菜单项设置插槽,因为在运行时之前我不知道将存在多少项
我可以想出一些丑陋的方法来实现这一点,但我正在寻找正确的方法。我通常做的是使用
QAction::setData(const QVariant&)
来存储我需要的任何操作ID。然后在插槽端,我使用QAction::data()
检索ID并相应地进行操作。
请注意,QVariant
显然接受的不仅仅是基本int(我用来识别动作),您可以传递任何与QVariant
兼容的信息
编辑:哦!顺便说一句,这有点难看,因为我使用QObject::sender()
将触发的动作转换回。对此很抱歉,但它仍然有效