qt 按钮快速连续点击过程中,第二次点击时响应问题
多次快速点击同一个按钮时,如果第一次点击的响应尚未处理结束,在这个时间段内不再响应任何其它点击;我是通过一个静态全局变量判断是否要执行后续操作的,由于槽函数是按照点击顺序顺序执行的,所以在槽函数返回前发送一个信号到队列,对变量进行复位。
问题是按照我的理解,第一次点击槽函数全部执行,接着是快速的第二次点击的响应(由于第一次点击的槽函数尚未执行结束,因此第二次的点击的槽函数应该不满足条件返回的),最后才是响应emit信号的。为什么第二次响应的是emit信号呢?
我的代码如下:
int MainWindow::bStatus = 0;//static类型
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPushButton* button1 = new QPushButton(this);
button1->setGeometry(210,120,75,40);
connect(button1,SIGNAL(clicked()),this,SLOT(info1()));
connect(this,SIGNAL(flagGlobalBusy()),this,SLOT(set_GlobalBusy()),Qt::QueuedConnection);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::info1( )
{
qDebug()<<"-----------BEGIN----------";
qDebug()<<"bStatus: "<<bStatus;
if( bStatus != 0 )
{
qDebug()<<"return because the button is busy! "<<bStatus;
return;
}
bStatus++;
qDebug()<<"bStatus++: "<<bStatus;
QLineEdit* phoneEdit = new QLineEdit(this);
QLabel* phoneLabel = new QLabel(phoneEdit);
phoneEdit->setGeometry(180,80,75,30);
phoneEdit->setAlignment( Qt::AlignCenter );
QString str = "button_1";
phoneEdit->setText(str);
phoneLabel->setBuddy(phoneEdit);
QThread::msleep(3000);
emit flagGlobalBusy();
phoneEdit->show();
qDebug()<<"----------END----------- ";
}
void MainWindow::set_GlobalBusy()
{
qDebug()<<"**********enter slots of flagGlobalBusy***********";
bStatus = 0;
}
快速点击4次时,执行结果如下:
-----------BEGIN----------
bStatus: 0
bStatus++: 1
----------END-----------
**********enter slots of flagGlobalBusy***********
-----------BEGIN----------
bStatus: 0
bStatus++: 1
----------END-----------
-----------BEGIN----------
bStatus: 1
return because the button is busy! 1
-----------BEGIN----------
bStatus: 1
return because the button is busy! 1
**********enter slots of flagGlobalBusy***********
为什么第二次响应的是emit信号,而不是第二次点击按钮时的点击信号?