2013-04-12 58 views
1

我正在將QVector從一個窗口傳遞到另一個窗口,我想將QVector中前一個窗口中存在的值追加到當前窗口中的QString。當我執行添加no match for 'operator+'時出現錯誤。QVector:不匹配'operator +'

這裏是我的代碼:

Window1.cpp

void SelectOS::processNextButton() 
{ 
    if(ui->win32->isChecked()){ 
     QString path; 
     path = qApp->applicationDirPath()+"/WIN/32Bit"; 
     so->osName.push_back(path); 
     SelectSoftware *ss = new SelectSoftware(); 
     this->hide(); 
     ss->show(); 
    } 
} 

QVector<QString> SelectOS::getosName(){ 
    so = new SelectOS(); 
    return so->osName; 
} 

Window2.cpp

void SelectSoftware::getSoftwareDetails() 
{ 

    SelectOS *so = new SelectOS(); 
    SelectSoftware *ss = new SelectSoftware(); 
    ss->os = so->getosName(); 

    QString fileName = ss->os + "/" +SOFTWARELIST; // Here I get the error... 

    QFile file(fileName); 
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ 
     QString msg = "Could not find the file " + fileName; 
     errorExit(msg); 
    } 

    QTextStream in(&file); 
    while (!in.atEnd()) { 
     QString line = in.readLine(); 
     processLine(line.toLower()); 
    } 
} 

幫幫我,謝謝...

回答

1

假設SOFTWARELIST是一個簡單的QString :

QString fileName = QString("%1/%2") 
        .arg(ss->os.last()) 
        .arg(SOFTWARELIST); 

這意味着要創建一個使用佔位符%1%2其中%1將通過ss->os.last()結果返回的最後一個項目的載體和%2將任何SOFTWARELIST是被替換被替換爲QString。

如果SOFTWARELIST也是一個向量,你需要調用例如.last()也是如此。

+0

我想從一個窗口傳遞字符串變量的列表到另一個,我需要使用哪一個? QList類型或QString或QVector? >>上面的代碼崩潰了應用程序:( –

+0

''QVector'完全適合這樣做,就像'QList'一樣,但是你是否試圖從列表中的所有條目創建一個文件名?包含一個示例文件名,請顯示'SOFTWARELIST'的定義 –

+0

我想說的是:將變量從一個窗口傳遞到另一個窗口不是問題,您的問題是您構建文件的部分名稱 –

0

QVector是一個容器類,其中包含集合的東西。在你的一組QString的例子中。因此,然後你試圖形成一個文件名,這是一個QString,你顯然不能添加到其他Qstring的文件名QString列表。 (真的說你可以,但不能用'+'運算符和稍微不同的代碼)。 老實說,我沒有馬上知道爲什麼你實際上傳遞QVector,如果你只需要一個應用程序路徑,我會建議使用QString。