在 Qt/C++ 中,有没有办法将按钮单击事件列表连接到一个插槽?
Posted
技术标签:
【中文标题】在 Qt/C++ 中,有没有办法将按钮单击事件列表连接到一个插槽?【英文标题】:In Qt/C++, is there a way to connect a list of button click events to one slot? 【发布时间】:2015-10-02 06:05:16 【问题描述】:在 Qt/C++ 中,我有一系列按钮,我想通过单个事件处理程序运行它们以进行单击,并知道单击了哪个按钮。
有没有办法将按钮单击事件列表连接到一个插槽?例如,我创建了一个QList<QPushButton *>
,然后使用单个connect()
语句来处理此列表的&QPushButton::clicked
信号,并将其映射到单个SLOT(onButtonClicked(QWidget *))
。
那里有关键字——单。当然,我可以迭代一个列表,但我想知道是否有一种方法可以在列表迭代之外只有一个 connect()
语句。
换句话说,我想知道是否已经有一种我可能没有意识到的有效方法来执行此操作,而不是我迭代QPushButton
的QList
。这只是高效和整洁的问题。
【问题讨论】:
你有一个例子here。 @Tarod 不完全是。我一直在寻找一种在迭代之外而不是在迭代内部的更整洁的方式。就像以某种方式将整个按钮列表传递给 connect() 调用而无需迭代。 我认为没有这种方法。您将始终必须通过信号映射器或直接与插槽建立每个按钮的单独连接。 您可以创建 1 个不带任何参数的插槽,并在内部使用sender()
方法 + qobject_cast
。
【参考方案1】:
处理此问题的最佳方法可能是使用QButtonGroup
。如果您坚持使用自己的列表或可能有不同的小部件或信号,您仍然可以使用QSignalMapper
。
http://doc.qt.io/qt-5/qbuttongroup.html
http://doc.qt.io/qt-5/qsignalmapper.html
【讨论】:
以上是关于在 Qt/C++ 中,有没有办法将按钮单击事件列表连接到一个插槽?的主要内容,如果未能解决你的问题,请参考以下文章
javafx:如何将Enter键绑定到按钮并在单击时触发事件?