2016-06-06 13 views
0

Я создал 4 разных QState, и я хочу скрыть один объект в состоянии перехода evry.QStateMachine как это работает

Это код:

QStateMachine partita; 

QState *inizio_mano = new QState(); 
QState *aspetto_G1_primo = new QState(); 
QState *aspetto_G1_secondo = new QState(); 
QFinalState *fine_mano = new QFinalState(); 

partita.setInitialState(inizio_mano); 

inizio_mano -> addTransition(this,presa==true,aspetto_G1_primo); 
inizio_mano -> addTransition(this,presa==false,aspetto_G1_secondo); 
aspetto_G1_primo -> addTransition(this,stato==true,fine_mano); 
aspetto_G1_secondo -> addTransition(this,stato==true,fine_mano); 

presa и stato являются два bool меняю на следующем шаге программы.

Теперь у меня есть QGraphicsScene, и в сцене я добавил в него несколько QGraphicsPixmapItem.

Например, я хочу, чтобы обновить сцену пряча предмет:

if(presa==true) {object1->hide();} 

Я понимаю, что я должен изменить QState (в данном случае от inizio_mano к aspetto_G1_primo), и я сделал это, добавив переход ,

Но как я могу скрыть этот предмет?

Как я могу подключить QState aspetto_G1_primo с object1 -> hide();

Я надеюсь, что я объяснил правильно.

Моя основная проблема: как назначить каждому QState другую конфигурацию сцены?

+0

Параметр 'addTransition' заявления вы написали недействительны , Переходы могут срабатывать * только * путем выключения сигнала или при получении события. Исправьте свой код, чтобы он сначала скомпилировался. –

ответ

1

У вас есть все свойства QWidget здесь: http://doc.qt.io/qt-5/qwidget.html#properties

класс Каждого ребенка также имеет свои собственные дополнительные свойства, которые в доке.

Так что вы можете сделать:

aspetto_G1_primo->assignProperty(object1, "visible", false); 

Тогда при входе в это состояние свойство «видимый» из object1 будет установлен в false.

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