c++ - Qt::UniqueConnection 是如何工作的?

标签 c++ qt signals-slots

我不太明白 Qt::UniqueConnection “标志”是如何工作的。

Qt::UniqueConnectionenum 中的常量Qt::ConnectionType,“描述信号和槽之间可以使用的连接类型”。

如文档中所述,Qt::UniqueConnection 常量是:

Same as AutoConnection, but the connection is made only if it does not duplicate an existing connection. i.e., if the same signal is already connected to the same slot for the same pair of objects, then the connection will fail. This connection type was introduced in Qt 4.6.

基于以下示例:

  for (int index = 0; index < 2; ++index)
  {
      QPushButton *myButton = new QPushButton("Button", this);
      connect(myButton, SIGNAL(clicked()), this, SLOT(doSomething()), Qt::UniqueConnection);
  }
  1. 它会根据按钮内存地址(我想)创建 2 个唯一连接(每个按钮一个)吗?

  2. 或者它会根据对象类型 (QPushButton) 和使用的信号和槽只创建一个连接(第二个连接会失败)?

最佳答案

如果你不放这个标志,这意味着你可以做同样的连接:即。相同的发送者对象、相同的接收者对象、相同的信号和相同的 Slot 不止一次。

插槽将被调用的次数与您建立此连接的次数相同。

但是你不应该在不必要的时候滥用这个标志,因为它会验证你的连接是否已经存在,这意味着代码会变慢。

Note :Qt::UniqueConnection 不适用于 lambda、非成员函数和仿函数;它们仅适用于连接到成员函数。

关于c++ - Qt::UniqueConnection 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43121597/

相关文章:

qt - 如何使用静态构建的 Qt 解决此 'no service found for - “org.qt-project.qt.mediaplayer” ' 错误?

c++ - 如何将矩形附加到 QGraphicsView

c++ - 在 Qt 信号和槽中使用 lambda 语法并访问传递的参数

python - pyqt:如何在外部变量值更改时动态更新小部件属性?

c++ - 具有堆栈分配的 C++ 类的 C 包装器

c++ - 在没有 qmake/VS 的情况下为 Qt Windows 应用程序设置 .exe 图标

C++ 如何在 shared_ptr vector 中存储多种类型?

c++ - 将类名插入容器

Qt:如何正确定义此代码的信号参数?

c++ - MFC框架中如何使用XML over HTTP实现双向通信