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

c – Qt:调整信号/绑定参数到插槽?

发布时间:2020-12-16 10:41:56 所属栏目:百科 来源:网络整理
导读:有没有办法将参数绑定到插槽ala boost::bind? 这是一个例子.我有一个带树视图的窗口,我想允许用户从上下文菜单中隐藏一列.我最终做了类似的事情: void MyWindow::contextMenuEvent (QContextMenuEvent* event) { m_column = view-columnAt (event-x()); QM
有没有办法将参数绑定到插槽ala boost::bind?

这是一个例子.我有一个带树视图的窗口,我想允许用户从上下文菜单中隐藏一列.我最终做了类似的事情:

void MyWindow::contextMenuEvent (QContextMenuEvent* event) {
   m_column = view->columnAt (event->x());
   QMenu menu;
   menu.addAction (tr ("Hide Column"),this,SLOT (hideColumn ()));
   // .. run the menu,etc
}

我需要捕获激活上下文菜单的列的索引,并将其存储在我的窗口的hideColumn插槽使用的成员变量中:

void MyWindow::hideColumn () {
    view->setColumnHidden (m_column,true);
}

我真正喜欢的是能够在创建菜单时将列号绑定到我的插槽,所以我不需要这个成员变量.基本上Qt相当于:

menu.addAction (tr ("Hide Column"),boost::bind (&MyWindow::hideColumn,event->columnAt (event->x()));

或者甚至更好地调整QAction::triggered信号并将其附加到QTreeView::hideColumn插槽,该插槽将列索引作为参数:

menu.addAction (tr ("Hide Column"),boost::bind (&QTreeView::hideColumn,view,event->columnAt (event->x())));

这有可能吗?

解决方法

AFAIK唯一的方法是创建一个QSignalMapper对象来执行此操作.它就像一个额外的间接级别,可用于生成提供列索引的新信号.这是一个有点笨拙的IME,你最终会有很多QSignalMapper对象一直闲逛,但这似乎是目前最好的方式. (理想情况下,IMO,您可以只提供任何值,例如connect()的列索引,它将作为参数传递给插槽,但您不能.)

(编辑:李大同)

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

    推荐文章
      热点阅读