Russian Qt Forum
Сентябрь 30, 2024, 20:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать кнопки временно неактивными?  (Прочитано 11794 раз)
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);

         }
     }
}
Но прикол в том, что если я нажму на кнопку во время задержки, спустя секунду слот все равно выполняется. Как же сделать кнопки нерабочими на определенное время?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Июль 02, 2013, 15:58 »

у нас год морского боя выдался Веселый

для оформления кода существует тэг code с параметром cpp

введи bool переменную, которая будет означать выполняется ли слот, и поставь на нее проверку в самом начале:
Код
C++ (Qt)
void Widget::changeCompButtons()
{
   if (_isWaiting)
       return;
 
   _isWaiting = true;
   ...
   _isWaiting = false;
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Sr.Gallardo
Гость
« Ответ #2 : Июль 02, 2013, 16:26 »

Спасибо за ответ. Сделал как вы и сказали, но странно, не помогло. Слот по-прежнему выполняется если кликну по кнопке во время задержки.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 02, 2013, 22:21 »

вообще сигнал от неактивной кнопки не посылается.
Но, в приведённом коде в одной функции, кнопки делались неактивными, а потом опять активные (по сути состояния-то они и не меняли, т.к. в цикл обработки событий возврата не было).
Записан

Юра.
Sr.Gallardo
Гость
« Ответ #4 : Июль 03, 2013, 00:03 »

да, но как мне все-таки сделать кнопки неактивными? изменить состояние кнопок вне слота? но как?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #5 : Июль 03, 2013, 01:01 »

вставь после цикла отключения кнопок qApp->processEvents()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #6 : Июль 03, 2013, 12:32 »

blockSignals?
Записан
Sr.Gallardo
Гость
« Ответ #7 : Июль 03, 2013, 12:37 »

вставь после цикла отключения кнопок qApp->processEvents()
спасибо, помогло наконец-то! вставил несколько  qApp->processEvents() в слот и заработало. 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 23.