2013-04-12 59 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。