我在一个块中使用一个信号和插槽连接.我的代码如下
在a.cpp
{
QObject::connect(m_ptheFlange2Details,SIGNAL(GetFlang1DimAfterAnalysis()),
this,SLOT(GetFlang1DimAftrAnalysis()));
m_ptheFlange2Details->get();// one function inside which i am emiting
// GetFlang1DimAfterAnalysis() signal ;
QObject::disconnect(m_ptheFlange2Details,SIGNAL(GetFlang1DimAfterAnalysis()),
this,SLOT(GetFlang1DimAftrAnalysis()));
}
Run Code Online (Sandbox Code Playgroud)
当执行此emit语句时,在get()函数内部,多次调用该槽.根据我的说法,它应该只召唤一次.
Ric*_*ith 32
正如一些评论中所述,这通常是由于连接多次调用连接引起的.每次建立连接时,将调用一次插槽.例如,以下代码将在发出一次slot()时被调用3次signal().
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()));
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()));
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()));
Run Code Online (Sandbox Code Playgroud)
如果您在可能多次运行的代码中进行连接,则通常最好将其Qt::UniqueConnection用作第5个参数.以下代码将导致在发出一次slot()时被调用1 signal()次.
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()), Qt::UniqueConnection);
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()), Qt::UniqueConnection);
connect(obj, SIGNAL(signal()), obj2, SLOT(slot()), Qt::UniqueConnection);
Run Code Online (Sandbox Code Playgroud)
我猜你的代码不能正常工作的原因是因为你省略了第5个参数并将默认值连接到Qt::DirectConnection(对于单线程程序).这会立即调用插槽,就好像它是一个函数调用一样.这意味着可以在断开连接之前再次调用connect(如果程序中存在循环).
| 归档时间: |
|
| 查看次数: |
10218 次 |
| 最近记录: |