Qt 有没有不使用中间QAction组访问QAction::data()的方法?

Qt 有没有不使用中间QAction组访问QAction::data()的方法?,qt,menu,Qt,Menu,创建动态菜单时,我通常需要关联的信号来响应特定的索引值(例如,与该菜单项关联的数据库行标识符)。要做到这一点,我似乎需要使用下面的代码,这感觉像一个黑客 QActionGroup *oneOffgroup = new QActionGroup(menu); QAction *action = new QAction(tr("New text form..."),menu); action->setData( writingSystem.id() ); oneOffgroup->add

创建动态菜单时,我通常需要关联的信号来响应特定的索引值(例如,与该菜单项关联的数据库行标识符)。要做到这一点,我似乎需要使用下面的代码,这感觉像一个黑客

QActionGroup *oneOffgroup = new QActionGroup(menu);
QAction *action = new QAction(tr("New text form..."),menu);
action->setData( writingSystem.id() );
oneOffgroup->addAction(action);
connect( oneOffgroup, SIGNAL(triggered(QAction*)), this, SLOT(newTextForm(QAction*)) );
submenu->addAction(action);

建议使用QMenu::triggered(QAction*)信号。不过,这只意味着我必须整理发送到菜单的每个信号。(这在某些情况下是可以的,但在我目前正在研究的情况下就不行了。)

为什么不能在newTextForm(QAction*)槽中使用QAction::data()?这个方案的哪一部分对你来说像是“黑客”呢?这是对setData()的完美使用,而不是黑客。米洛维多夫,问题是如何获得包含QAction*参数的信号。Jmk和Frank,我知道这段代码是合法的,但它似乎是一种解决方法,可以将QActionGroup用于单个操作。我想可能有更直接的方法来实现这种行为。从您的代码片段中还不完全清楚发生了什么,但我想我现在理解了您的问题。为什么不为所有动态项使用一个
QActionGroup
triggered
信号包括已触发的操作,因此不需要为每个操作指定单独的组。