QVector:不匹配'operator +'

时间:2013-04-12 05:32:06

标签: qt qstring

我将QVector从一个窗口传递到另一个窗口,我想将前一个窗口中存在的QVector中的值附加到当前窗口中的QString。我在执行添加no match for '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());
    }
}

帮助我,谢谢...

2 个答案:

答案 0 :(得分:1)

假设SOFTWARELIST是一个简单的QString:

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

这意味着您要创建一个包含占位符%1%2的QString,其中%1将替换为ss->os.last()的结果,该结果将返回向量中的最后一项, %2将替换为SOFTWARELIST

如果SOFTWARELIST也是矢量,则需要拨打电话,例如.last()也是如此。

答案 1 :(得分:0)

QVector是一个容器类,它包含 set 的东西。在你的示例QString集中。那么你尝试形成一个文件名,这是一个QString,你显然无法添加到其他Qstring的fileName QString列表中。 (真的说你可以,但不能用&#39; +&#39;运算符和稍微不同的代码)。 老实说,如果你只需要一个我建议只使用QString的应用程序路径,我没有立即知道你实际传递QVector的原因。