Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为运行时构造的菜单正确设置通用QT操作?_C++_Qt_Qt4 - Fatal编程技术网

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

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

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

我不确定如何正确设置操作的插槽端:

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()
将触发的动作转换回。对此很抱歉,但它仍然有效