2013-09-25 40 views
-1

我想編寫一個函數來顯示我的GUI的基本流程,就像我在一個插槽中調用該函數一樣,它開始狀態轉換爲FileMenu-> Open(信號觸發並啓用插槽連接到它)等等。我試着用狀態機作爲: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. 在widget /對象的構造函數創建狀態機,並做到這一點只有一次。

  2. 添加QSignalTransition以觸發轉換爲d1

還應驗證碼,否則工作。您可以使用ui->menuFile->show()來顯示菜單,而不是在您的功能中使用狀態機。在嘗試其他任何事情之前,這必須工作。

你說你的功能是從槽中調用的。顯然有一個信號觸發那個插槽。這是您用來創建QSignalTransition的對象和信號。

+0

請再次看到問題。 – Tab