gpt4 book ai didi

c++ - Qt:将信号/绑定(bind)参数适配到插槽?

转载 作者:太空狗 更新时间:2023-10-29 19:37:47 24 4
gpt4 key购买 nike

有没有办法将参数绑定(bind)到插槽ala boost::bind

举个例子。我有一个带有 TreeView 的窗口,我想允许用户从上下文菜单中隐藏一列。我最终做了类似的事情:

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);
}

我真正想要的是能够在创建菜单时将列号绑定(bind)到我的插槽,这样我就不需要这个成员变量了。基本上 Qt 相当于:

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

或者更好的是改编 QAction::triggered信号并将其附加到 QTreeView::hideColumn插槽,它将列索引作为参数:

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

这些都可行吗?

最佳答案

LibQxt通过 QxtBoundFunction 和 QxtMetaObject 使这成为可能(前者由于某种原因没有出现在他们的 documentation 中)。这是一个开源项目,因此如果您对实现感兴趣,可以获取源代码。它使用以下语法:

connect(
button,
SIGNAL(clicked()),
QxtMetaObject::bind(
lineEdit,
SLOT(setText(QString)),
Q_ARG(QString, "Hello World!)
)
);

LibQxt还有一些其他非常有用的功能,比如 emit signals over a QIODevice 的能力,例如网络连接。

关于c++ - Qt:将信号/绑定(bind)参数适配到插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com