我正在从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,因为我不知道在运行时将存在多少个项目。
我可以想到一些丑陋的方法来做到这一点,但我正在寻找正确的方法。
最佳答案
我通常要做的是使用QAction::setData(const QVariant&)
存储我需要的任何操作ID。然后在插槽端,我使用QAction::data()
检索ID并相应地执行操作。
请注意,QVariant
显然比基本int(这是我用来识别动作)所接受的要多得多,您可以传递任何QVariant
兼容的信息。
编辑:哦!顺便说一句,这有点丑陋,因为我利用QObject::sender()
来回退触发的动作。抱歉,但是还是可以的。
关于c++ - 如何为运行时构造的菜单正确设置通用QT操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14464884/