2012-07-18 81 views
4

我在QML中使用Q_PROPERTY。我的代碼是:Q_PROPERTY未顯示

using namespace std; 

typedef QString lyricsDownloaderString; // this may be either std::string or QString 

class lyricsDownloader : public QObject 
{ 
    Q_OBJECT 
public: 
    Q_PROPERTY(QString lyrics READ lyrics NOTIFY lyricsChanged) 
    Q_INVOKABLE virtual short perform() = 0; 
    inline void setData(const string & a, const string & t); // set artist and track 
    Q_INVOKABLE inline void setData(const QString & a, const QString & t); // for QStrings 
    Q_INVOKABLE inline bool anyFieldEmpty(); // check whether everything is filled 
    inline QString lyrics() 
    { 
     return lyrics_qstr; 
    } 

/*some more data*/ 
signals: 
    void lyricsChanged(QString); 
}; 

class AZLyricsDownloader : public lyricsDownloader 
{ 
    Q_OBJECT 
public: 
    AZLyricsDownloader() : lyricsDownloader("", "") {} 
    AZLyricsDownloader(const string & a, const string & t) : lyricsDownloader(a, t) {} 
    Q_INVOKABLE short perform(); 
    //Q_INVOKABLE inline void setData(const string & a, const string & t);// set artist and track 

protected: 
    /*some more data*/ 
}; 

和頁數在QML之一是

import QtQuick 1.1 
import com.nokia.meego 1.0 
import com.nokia.extras 1.0 

Page 
{ 
    id: showLyricsPage 
    tools: showLyricsToolbar 

    Column 
    { 
     TextEdit 
     { 
      id: lyricsview 
      anchors.margins: 10 
      readOnly: true 
      text: azdownloader.lyrics 
     } 
    } 

    Component.onCompleted: 
    { 
     azdownloader.perform() 
     busyind.visible = false 
    } 

    BusyIndicator 
    {id: busyind /**/ } 

    ToolBarLayout 
    {id: showLyricsToolbar/**/} 

    // Info about disabling/enabling edit mode 

    InfoBanner {id: editModeChangedBanner /**/} 
} 

azdownloader是AZLyricsDownloader對象

的代碼正確地運行在C++中,該函數將返回這應該是文本在TextEdit中。

但不幸的是,TextEdit是空白的。沒有文字顯示在那裏。 信號沒有物體,但AFAIK信號不需要它。

如果我使用

Q_PROPERTY(QString lyrics READ lyrics CONSTANT) 

的結果是一樣的。

我在做什麼錯?

+0

你把lyricsChanged信號連接到了什麼嗎? – Blood 2012-07-18 17:28:48

回答

8

當您更改C++代碼的lyrics屬性的值,你必須發送的財產(這裏void lyricsChanged();)的NOTIFY信號:

this->setProperty("lyrics", myNewValue); 
emit lyricsChanged(); 

在這種情況下,QML應該更新的價值屬性。

+0

謝謝! (15個字符) – marmistrz 2012-07-19 12:11:13