Qt :: UniqueConnection如何工作?

Kel*_*inS 3 c++ qt signals-slots

我不太了解Qt::UniqueConnection“标志”的工作原理。

该Qt::UniqueConnection距离以恒定的枚举 Qt::ConnectionType “描述的类型,可以信号和槽之间使用连接的”。

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

与自动连接相同,但仅在不复制现有连接的情况下才建立连接。即,如果同一对对象的同一信号已经连接到同一插槽,则连接将失败。这种连接类型是在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);
  }
Run Code Online (Sandbox Code Playgroud)
  1. 它会根据按钮存储地址(我想)创建2个唯一的连接(每个按钮一个)吗?

  2. 还是根据对象类型(QPushButton)以及所使用的信号和插槽仅创建一个连接(第二个连接将失败)?

小智 7

如果不放置此标志,则表示可以进行相同的连接:即。相同的发送者对象,相同的接收者对象,相同的信号和相同的插槽不止一次。

进行此连接时,将调用该插槽多次。

但是,在不需要时不要滥用该标志,因为它会进行验证以查看您的连接是否已经存在,这意味着代码会变慢。

注意:Qt::UniqueConnection不适用于lambda,非成员函数和函子;它们仅适用于连接到成员函数。