加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:45:19 所属栏目:百科 来源:网络整理
导读:首先,我有一个QWidget的列表,我不知道直到运行时的长度.然后我创建一个QListWidget,我在其中显示它们,当有人点击它时,我使用signalItemChanged(QListWidgetItem *,QListWidgetItem *)信号来捕获它并获取点击的项目的索引. 现在我想在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中进行了说明.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读