Название: Как сделать кнопки временно неактивными? Отправлено: Sr.Gallardo от Июль 02, 2013, 15:48 Пишу морской бой на qt.Пытаюсь реализовать задержку. На время задержки нужно сделать кнопки нерабочими, короче сделал так:
//slot changeCompButtons() вызывается по нажатию кнопки void Widget::changeCompButtons(){ //сразу делаю кнопки не кликабельными for(int i=0 ; i<10 ; i++) { for(int j=0 ; j<10 ; j++) { buttonsComp[j]->setEnabled(false); } } // QPushButton *btn=(QPushButton*)sender(); int theRow=btn->objectName().toInt()/10; int theCol=btn->objectName().toInt()%10; if(computerMap[theRow][theCol]==1) { computerMap[theRow][theCol]=3; playerScore->setText(QString::number(playerScore->text().toInt()+10)); } pl=true; bool res=isKilled(theRow,theCol); comp=true; if(firstStep==1) { time.restart(); while(time.elapsed()<1000) { } } if(firstStep==0) { time.start(); while(time.elapsed()<1000) { } firstStep++; } AI(); //в конце возвращаю кнопки в рабочее состояние for(int i=0 ; i<10 ; i++) { for(int j=0 ; j<10 ; j++) { buttonsComp[j]->setEnabled(true); } } } Но прикол в том, что если я нажму на кнопку во время задержки, спустя секунду слот все равно выполняется. Как же сделать кнопки нерабочими на определенное время? Название: Re: Как сделать кнопки временно неактивными? Отправлено: kambala от Июль 02, 2013, 15:58 у нас год морского боя выдался :D
для оформления кода существует тэг code с параметром cpp введи bool переменную, которая будет означать выполняется ли слот, и поставь на нее проверку в самом начале: Код
Название: Re: Как сделать кнопки временно неактивными? Отправлено: Sr.Gallardo от Июль 02, 2013, 16:26 Спасибо за ответ. Сделал как вы и сказали, но странно, не помогло. Слот по-прежнему выполняется если кликну по кнопке во время задержки.
Название: Re: Как сделать кнопки временно неактивными? Отправлено: lit-uriy от Июль 02, 2013, 22:21 вообще сигнал от неактивной кнопки не посылается.
Но, в приведённом коде в одной функции, кнопки делались неактивными, а потом опять активные (по сути состояния-то они и не меняли, т.к. в цикл обработки событий возврата не было). Название: Re: Как сделать кнопки временно неактивными? Отправлено: Sr.Gallardo от Июль 03, 2013, 00:03 да, но как мне все-таки сделать кнопки неактивными? изменить состояние кнопок вне слота? но как?
Название: Re: Как сделать кнопки временно неактивными? Отправлено: kambala от Июль 03, 2013, 01:01 вставь после цикла отключения кнопок qApp->processEvents()
Название: Re: Как сделать кнопки временно неактивными? Отправлено: Fregloin от Июль 03, 2013, 12:32 blockSignals?
Название: Re: Как сделать кнопки временно неактивными? Отправлено: Sr.Gallardo от Июль 03, 2013, 12:37 вставь после цикла отключения кнопок qApp->processEvents() спасибо, помогло наконец-то! вставил несколько qApp->processEvents() в слот и заработало. |