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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ожидания нажатия клавишы.  (Прочитано 3278 раз)
SubaroMows
Гость
« : Ноябрь 30, 2011, 18:41 »

Доброго время суток.
Встала задача: в методе ожидать, до тех пор пока не нажата клавиша.

К примеру есть форма на которой задают вопросы:
Текст вопроса
Ответ на вопрос.
кнопка которая говорит следующий вопрос и подтверждает текущий.

Есть метод, который возвращает ответ на вопрос.
Код:
QString askQuest() {
//Ждём пока не нажада кнопка далее и только после этого возвращаем в методе значение
   return answer;
}

можно конечно сделать типа
Код:
while (btnClicked <> true);

Но циклы while не есть тон хорошего программирования.

Видел пример с QMessageBox, решающей мою проблему
Код:
    QMessageBox msgBox;
    msgBox.setText(tr("Желаете сохранить сделанные\nвами изменения?"));
    msgBox.setWindowTitle("Закрытие редактора доменов");
    msgBox.setIcon(QMessageBox::Warning);

    QPushButton *btnYes = msgBox.addButton(tr("Да"), QMessageBox::ActionRole);
    QPushButton *btnNo = msgBox.addButton(tr("Нет"), QMessageBox::ActionRole);
    QPushButton *btnCan = msgBox.addButton(tr("Отмена"), QMessageBox::ActionRole);
    msgBox.exec();
    if (msgBox.clickedButton() == btnYes) {
        on_acceptChange_clicked();
        willChange = false;
        return true;
    } else if (msgBox.clickedButton() == btnNo) {
        willChange = false;
        return true;
    } else if (msgBox.clickedButton() == btnCan) {
        return false;
    }
    return false;

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

Сообщений: 4746



Просмотр профиля WWW
« Ответ #1 : Ноябрь 30, 2011, 18:57 »

а вынести то, что в твоем методе идет после нажатия на кнопку, в отдельный слот/метод нельзя?
Записан

Изучением 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
SubaroMows
Гость
« Ответ #2 : Ноябрь 30, 2011, 19:40 »

Никак вообще.
Я вызываю str = askQuest();
В другом методе.
Записан
SubaroMows
Гость
« Ответ #3 : Ноябрь 30, 2011, 20:18 »

Элегантное решение:
Код:
    QEventLoop eventLoop;
    connect(this,
            SIGNAL(nextClicked()),
            &eventLoop,
            SLOT(quit()));
    eventLoop.exec();

сигнал nextClicked срабатывает в том случае если клавиша нажата,
следовательно eventLoop.exec(), закрывается, и программа идёт дальше по коду.
Записан
Bepec
Гость
« Ответ #4 : Декабрь 01, 2011, 07:09 »

Мда, оригинально, не скажешь. сам бы я в жизни не додумался что так можно сделать.
По сути у тебя и есть цикл бесконечный, так еще и утяжеленный сигналом Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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