2
回答
『Qt』遇到了一个难题,获取被点击的菜单项在这个菜单中的索引
华为云实践训练营,热门技术免费实践!>>>   

有一个菜单是动态创建的,根据外部数据来决定其有多少个菜单项的,而这些菜单项也不能是对应不同的动作啊,因为就是一个动作,只不过是要根据被点击的菜单项来决定。

就像是这样:

外部数据:a b c d e

那么这个菜单就有5个项,但是如何让这些项被点击时,能直接用其索引来调用事件处理函数呢?

比如一般的槽的定义:

connect(act, SIGNAL(triggered()), this, SLOT(OnFileOpen()));

这个是固定的,就是点击“打开文件”这个菜单项然后调出打开文件对话框,完了。但是我需要的是动态的,也就是这样的:


connect(act, SIGNAL(?), this, SLOT(OnSelectItem(int)));

因为外部数据是会更新的,是要根据外部数据来决定有多少个项,,所以不能弄几个固定数量的SLOT来处理,只能是用一个带参数的SLOT来处理。但是我就不知道这个信号该怎么样写了,Qt文档中QMenu类也没有提供菜单项索引的信号。就很困惑。

目前我唯一能想到的,就是在Qt文档发现的connect的一个用法,可以用lambda,似乎我就可以这样解决:

// 示范代码
QMenu* m = new QMenu(this);
for (int i = 0; i < item_count; i++)
{
    QAction* act = m->addAction(item[i].name);
    connect(act, SIGNAL(triggered()), [=] () {
        this->OnSelectItem(i);
    });
}



但我自己也没试,因为不知道行不行,会不会其实有直接能完成这个需求的办法。也不知道大家是不是看明白了我要问的,我不会描述。

来此求问,希望大家帮下忙,指教一下,实在是头疼。




Qt
举报
句龙胤
发帖于3年前 2回/1K+阅
顶部