2015-11-10 4 views
0

Я писал некоторые базовые приложения с Qt и нашел, что его сигналы и слот-механизм очень полезны. Однако есть кое-что, что я надеюсь сделать, но я не могу понять, как заставить его работать.Qt Сигналы/слоты можно менять?

В принципе, я хочу иметь экран с текстом, рисунками и т. Д. Когда я нажимаю кнопку, я хочу, чтобы другой материал на экране изменился соответствующим образом. Затем я хочу повторить этот процесс. Приложение, о котором я думаю, похоже на основную текстовую игру.

Я надеюсь написать что-то вроде этого:

void someFunction() 
{ 
    //Display some stuff 
    if(button1pressed()) 
    { 
     //display some different stuff 
     if(button1pressed()) 
     { 
      ... 
     } 
     if(button2pressed()) 
     { 
      ... 
     } 
     if(button...pressed()) 
     { 
      ... 
     } 
    } 
    if(button2pressed()) 
    { 
     //display some different stuff 
     if(button1pressed()) 
     { 
      ... 
     } 
     if(button2pressed()) 
     { 
      ... 
     } 
     if(button...pressed()) 
     { 
      ... 
     } 
    } 
    if(button...pressed()) 
    { 
     //display some different stuff 
     if(button1pressed()) 
     { 
      ... 
     } 
     if(button2pressed()) 
     { 
      ... 
     } 
     if(button...pressed()) 
     { 
      ... 
     } 
    } 
} 

Есть ли способ кнопки гнездо прессы, как это? Или другой способ реализовать ту же идею? Благодаря!

+0

Если вы хотите, чтобы какой-то элемент gui сохранял состояние после щелчка пользователя, почему бы просто не использовать 'QRadioButton' или' QCheckBox'? У них есть что-то вроде '\t isChecked' – fghj

+0

. Пропустил бы я затем каждую часть, проверяя, пока не нажмут? Я рассмотрю это дальше. – atomiczap

+0

Нет, петли, конечно, возможны, но это «не нужно» с точки зрения современного использования компьютера (например, для предотвращения употребления батареи), измените свой дизайн на основе событий – fghj

ответ

3

Слишком много вложенных утверждений «если» не является хорошей идеей. Для удобства чтения и для будущего, если вы хотите обновить свое программное обеспечение. Это всегда просто в начале, но оно, как правило, сложное ... Вы можете использовать state pattern, который позволяет изменять поведение объекта в зависимости от предпринятых действий. Каждый вызов кнопки изменяет внутреннее состояние объекта, и способ, которым это изменение выполняется, может зависеть от текущего внутреннего состояния. Например:

  • Исходное состояние "1"
  • из состояния срабатывания кнопки "1", "А" приводит к состоянию "2"
  • из состояния "2", кнопку запуска "A" приводит к состоянию «3»
  • Из состояния «3», кнопка запуска «B» инициализирует государству «1»

Edit: как заявлено Kuba, QStateMachine класс помогает вам в этом процессе ,

Еще одна идея - сохранить порядок нажатых кнопок. Подключите каждое событие пресса к слоту (может помочь QSignalMapper) и сохраните заказ в списке. Затем обработайте список и выполните действия соответственно.

Смежные вопросы