2013-09-25 2 views
-1

슬롯에서 해당 함수를 호출하는 것처럼 FileMenu-> Open (신호가 트리거되고 활성화 됨) 상태에서 전환을 시작하는 것처럼 GUI의 기본 흐름을 표시하는 함수를 코딩하려고합니다. 그것에 연결된 슬롯) 등등. 상태 머신에서 다음과 같이 시도했습니다.신호를 트리거하는 QStatemachine : 연결된 슬롯이 호출되지 않음

d1->assignProperty(ui->menuFile,"visible",true); 

d0->addTransition(d1); 

d1->addTransition(ui->actionOpen,SIGNAL(triggered()),d0); 

dem->addState(d0); 
dem->addState(d1); 

dem->setInitialState(d0); 
dem->start(); 

파일 메뉴가 나타나지 않습니다. 또한 상태 전환시 신호가 트리거되지 않습니다. 나는 QStateMachine을 처음 사용하고 있습니다. 이 방법으로 신호를 트리거하는 것이 가능한지 확실하지 않습니다. 그렇다면 내 코드에서 무엇이 잘못 되었는가 아니면이를 수행하는 더 좋은 방법이 있습니까?


편집 : 파일 메뉴 수정 :

QRect r0 = this->geometry(); 
QRect tbar = ui->menuBar->geometry(); 
QRect r = ui->menuFile->geometry(); 
r.setCoords(r0.x(),r0.y()+tbar.height(),r0.x()+r.width(),r0.y()+r.height()+tbar.height()); 

ui->menuFile->setGeometry(r); 
ui->menuFile->show(); 

답변

0

당신은 질문에 주어진 코드가 함수 내 말, 당신은 메뉴를 표시하기 위해 전환을 시작하는 기능을합니다. 함수 자체는 슬롯 내에서 호출됩니다.

이 기능에서 상태 시스템을 다시 작성하거나 기능이 실제로 필요하지 않습니다. 당신이해야

는 :

  1. 위젯/객체 생성자의 상태 머신을 생성하고 한 번만 않습니다.

  2. QSignalTransition을 추가하여 d1으로 트리거를 전환하십시오.

코드가 제대로 작동하는지 확인해야합니다. 귀하의 기능에 상태 기계가있는 대신, 단순히 ui->menuFile->show()을 사용하여 메뉴를 표시하십시오. 이 작업은 다른 작업을 시도하기 전에 작동해야합니다.

귀하의 기능은 슬롯에서 호출되었다고합니다. 분명히 그 슬롯을 트리거하는 어딘가에 신호가 있습니다. 이것이 QSignalTransition을 만드는 데 사용하는 객체 및 신호입니다.

+0

다시 질문을 참조하십시오. – Tab