2013-05-07 32 views
0

我有以下結構:Qt的傳遞QString時,結構構造不起作用

struct HidItem 
{ 
    HidItem(){} 
    HidItem(QString commandName, uint commandValue) 
    { 
     name = commandName; 
     value = commandValue; 
    } 

    QString name; 
    uint value; 
}; 

,並試圖建立像這樣一個實例:

HidCommandModel::HidCommandModel() 
    : QAbstractListModel(), 
     hidData(new QVector<HidItem>(10)) 
{ 
    HidItem *hidItem = new HidItem("USAGE_PAGE", 1); 
    hidData->append(*(hidItem)); 
} 

這不是工作壓力太大還有,因爲只有UINT commandValue被分配到HidItem實例,而不是的QString 「USAGE_PAGE」

我好幾年沒有編碼C++了,但是在我看來,我錯誤地傳遞了字符串,需要通過引用,指針和複製和寫入來傳遞一些功能。

理論在那裏,但我的實際技能讓我今天非常可怕。任何人都可以協助

+2

你如何檢查它不工作? – 2013-05-07 13:13:10

+0

我通過在代碼中設置斷點並在調試運行中檢查變量來檢查。 – 2013-05-07 13:20:17

+0

好吧,問題不在於hidData-> append line ... – 2013-05-07 13:21:27

回答

3

工作對我來說:

struct HidItem 
{ 
    HidItem(){} 
    HidItem(QString commandName, uint commandValue) 
    { 
     name = commandName; 
     value = commandValue; 
    } 

    QString name; 
    uint value; 
}; 


int main(int argc, char ** argv) { 
    QApplication app(argc, argv); 

    HidItem *hidItem = new HidItem("USAGE_PAGE", 1); 
    qDebug() << hidItem->name << "," << hidItem->value; 
} 

輸出:

你應該改變
"USAGE_PAGE" , 1 

一件事是HidItem構造方法的簽名,所以它需要一個const引用,而不是一個對象:

HidItem(const QString& commandName, uint commandValue) { 
... 

這可以避免不必要的臨時對象的創建。但是,你的方法也很好。


真正的問題是QVector構造函數的錯誤用法:

QVector<HidItem>* hidData = new QVector<HidItem>(10); 
hidData->append(hidItem); 

追加hidItem爲元素#11自從QVector已經包含在被創建後10個元素。

只需使用

QVector<HidItem>* hidData = new QVector<HidItem>(); 
hidData->append(hidItem); 

(並考慮@Mike西摩關於new的言論)。

+0

感謝安德烈亞斯,我剛剛意識到我的問題是與hidData-> append(*(hidItem)); line。當我嘗試通過使用hidData->在(0) .name例如,我什麼都沒有得到。 – 2013-05-07 13:23:28

+0

感謝您的qDebug()提示,不知道你能做到這一點;) – 2013-05-07 13:26:34

+0

哇,謝謝!我的C++不僅生鏽了多年,我認爲我得到了黴菌生長遍佈它...:D – 2013-05-07 13:33:39