我有一个槽函数是这么写的
特点是槽函数运行事件比较长,需要几秒钟。
频繁地点击可能会崩溃
connect(m_ui.RefreshButton, SIGNAL(clicked()), this, SLOT(SlotRefreshButtonClicked()));
void A::SlotRefreshButtonClicked()
{
doSomethings();
//Take a few seconds
}
问题是:我们只点击一次把槽函数运行100次,等它运行完再点击运行。如下。它并不会崩溃
void A::SlotRefreshButtonClicked()
{
for(int i=0;i<100;i++)
{
doSomethings();
//Take a few seconds
}
}
这样密集点击100次,会崩溃
void A::SlotRefreshButtonClicked()
{
doSomethings();
//Take a few seconds
}
也就是说 并不是doSomethings();这个函数出了问题,而是qt本身地机制处理问题
这里对于运行事件较长的槽函数,都需要设置:没有运行完不允许点击第二次
所以设置如下
void A::SlotRefreshButtonClicked()
{
m_ui.RefreshButton->setEnabled(false);
doSomethings();
//Take a few seconds
m_ui.RefreshButton->setEnabled(true);
}