c – 如何将QActions列表添加到QMenu并使用单个插槽处理?

前端之家收集整理的这篇文章主要介绍了c – 如何将QActions列表添加到QMenu并使用单个插槽处理?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,我有一个QWidget的列表,我不知道直到运行时的长度.然后我创建一个QListWidget,我在其中显示它们,当有人点击它时,我使用signalItemChanged(QListWidgetItem *,QListWidgetItem *)信号来捕获它并获取点击的项目的索引.

现在我想在QMenu中做类似的事情.当我的QMenu和它的动作被建立时,我会知道这个列表,但是我将无法硬编码.

如何创建动作,捕捉他们的信号并将它们连接到同一个插槽,根据操作的菜单列表中的位置(索引)不同而不同.必须有一些方法解决这个问题,因为其他应用程序使用它.我试图看映射,但是我不知道如何使用它.

我试图在插槽中抓住发件人,但无法从中获取任何有用的信息.

解决方法

您可以使用QAction :: setData创建一个索引(或任何其他数据)到每个动作,并将QMenu :: triggered(QAction *)信号连接到您的插槽.

然后,您可以通过插槽参数的QAction :: data()函数检索数据.

MyClass::MyClass() {
    // menu creation
    for(...) {
        QAction *action = ...;
        action->setData(10);
        ...
        menu->addAction(action);
    }
    // only one single signal connection
    connect(menu,SIGNAL(triggered(QAction*)),this,SLOT(mySlot(QAction*)));
}

void MyClass::mySlot(QAction *action) {
   int value = action->data().toInt();

}

其他方法:信号映射或使用sender(),在that article of Qt Quaterly中进行了说明.

猜你在找的C&C++相关文章