2014-02-18 99 views
0

我有一個Qt(4.7.4)應用程序,它是其他應用程序的圖形終端。 在QML中,我用(named)控件定義了Views。 在C++中,我接收來自應用程序的命令,這些命令請求顯示包含我的控件的指定值的視圖。當命令來臨時,我使用類似於C++到QML - 設置屬性

myView = LoadTheNewViewIntoLoader(viewName); 
QObject* ctrl = myView->findChild<QObject*>(ctrlName); 
if(ctrl) 
{ 
    ctrl->setProperty("caption", newCaption); 
} 

更新控制值(即更改文本,圖像或其他)。

問題:這樣的操作有多快?或者:我如何確定所有屬性都已應用於控件?

問題是,在C++中,我爲加載視圖和設置所有屬性的操作創建了一個信號量,但是當在壓力測試期間有很多命令來臨時,我感覺這些值沒有足夠的時間從C++傳播到QML,當我執行下一個命令時,以前的操作仍在執行。在這種情況下,控件會從屏幕上消失一段時間,有時甚至會出現分割錯誤。對於具有大量控件的更復雜的屏幕,這更容易實現。

回答

0

將您的設計與性能/負載處理分開。

使用SLOTS,SIGNALS

讓C++處理邏輯和所述設爲Qml控制,觀衆

喜歡的東西 MyView的= LoadTheNewViewIntoLoader(的viewName);

QObject* ctrl = myView->findChild<QObject*>(ctrlName); 

if (ctrl) 
{ 
    emit sgnShowcaption("newCaption"); 
} 

手柄QML這個信號 並設置 .label = STR(STR應是你抓住的信號)

+0

所以每次我找到當前視圖控制(有時甚至可能在一次ShowView操作中有100次),我應該連接到它的插槽然後發出信號?這將有助於我的表現/穩定性問題? – kappa