这行代码有什么问题?QString data = QString("1-%1-%2").arg(score_query.value(0)).arg(score_query.value(1));、
时间: 2023-11-22 13:53:33 浏览: 62
这行代码的问题在于没有对 `score_query.value(0)` 和 `score_query.value(1)` 的类型进行检查。`arg()` 函数接受的参数应该是一个字符串,如果 `score_query.value(0)` 或 `score_query.value(1)` 不是字符串类型,那么 `arg()` 函数会尝试将其转换为字符串。如果转换失败,那么程序就会出现问题。
为了避免这种情况,可以使用 `toString()` 函数将 `score_query.value(0)` 和 `score_query.value(1)` 转换为字符串类型,代码如下:
```
QString data = QString("1-%1-%2").arg(score_query.value(0).toString()).arg(score_query.value(1).toString());
```
这样就可以确保 `arg()` 函数接收到的是字符串类型的参数,避免了出现类型转换错误的问题。
相关问题
这段代码在QT5中有什么错: QMimeData *data = new QMimeData; if(_projectPath == ""){ data->setText((_filePath + '/').c_str() + QString("%1_%2_%3_%4_%5_%6_%7_%8_%9"). arg(_xTitle).arg(_fixFreqNum).arg(_fixThetaNum).arg(_fixPhiNum).arg(_cutState). arg(curveVisible[0]).arg(curveVisible[1]).arg(curveVisible[2]).arg(curveVisible[3])); QString temp = data->text(); drag->setMimeData(data); }else{ data->setText((_projectPath + '/').c_str() + QString("%1_%2_%3_%4_%5_%6_%7_%8_%9"). arg(_xTitle).arg(_fixFreqNum).arg(_fixThetaNum).arg(_fixPhiNum).arg(_cutState). arg(curveVisible[0]).arg(curveVisible[1]).arg(curveVisible[2]).arg(curveVisible[3])); drag->setMimeData(data); }
在Qt 5中,`QMimeData`类的`setText()`方法需要一个`QString`类型的参数,而你的代码中使用了`c_str()`将一个C风格字符串与`QString`相加,这是不正确的。正确的做法是使用`QString`的构造函数将C风格字符串转换为`QString`对象。下面是修改后的代码:
```cpp
QMimeData *data = new QMimeData;
if(_projectPath == ""){
data->setText(QString((_filePath + '/').c_str()) + QString("%1_%2_%3_%4_%5_%6_%7_%8_%9").
arg(_xTitle).arg(_fixFreqNum).arg(_fixThetaNum).arg(_fixPhiNum).arg(_cutState).
arg(curveVisible[0]).arg(curveVisible[1]).arg(curveVisible[2]).arg(curveVisible[3]));
QString temp = data->text();
drag->setMimeData(data);
}else{
data->setText(QString((_projectPath + '/').c_str()) + QString("%1_%2_%3_%4_%5_%6_%7_%8_%9").
arg(_xTitle).arg(_fixFreqNum).arg(_fixThetaNum).arg(_fixPhiNum).arg(_cutState).
arg(curveVisible[0]).arg(curveVisible[1]).arg(curveVisible[2]).arg(curveVisible[3]));
drag->setMimeData(data);
}
```
在上述修改中,我使用了`QString`的构造函数来将C风格字符串转换为`QString`对象,并通过`+`操作符将两个`QString`对象进行连接。希望这能解决你的问题。如果还有其他问题,请随时提问。
QMimeData *data = new QMimeData; if(_projectPath == ""){ data->setText((_filePath + '/').c_str() + QString("%1_%2_%3_%4_%5_%6_%7_%8_%9"). arg(_xTitle).arg(_fixFreqNum).arg(_fixThetaNum).arg(_fixPhiNum).arg(_cutState). arg(curveVisible[0]).arg(curveVisible[1]).arg(curveVisible[2]).arg(curveVisible[3])); QString temp = data->text(); drag->setMimeData(data); }else{ data->setText((_projectPath + '/').c_str() + QString("%1_%2_%3_%4_%5_%6_%7_%8_%9"). arg(_xTitle).arg(_fixFreqNum).arg(_fixThetaNum).arg(_fixPhiNum).arg(_cutState). arg(curveVisible[0]).arg(curveVisible[1]).arg(curveVisible[2]).arg(curveVisible[3])); drag->setMimeData(data); }这串代码报错:error C2512: “QMimeData”: 没有合适的默认构造函数可用 1>c:\users\msi\documents\visual studio 2015\projects\charttest\chartpro\chartpro.cpp(5280): error C2027: 使用了未定义类型“QMimeData”
根据错误信息来看,你的代码报错是因为`QMimeData`类没有默认的构造函数可用。在创建`QMimeData`对象时,你可以使用带参数的构造函数来初始化对象。以下是一种可能的解决方案:
```cpp
QMimeData *data = new QMimeData();
```
在这个解决方案中,我们使用了带空参数的构造函数来创建`QMimeData`对象。这样就能够避免编译错误。希望这个解决方案能够帮到你!如果你还有其他问题,请随时提问。
阅读全文