E:\Qt.projects\QTwork\FileDemo\mainwindow.cpp:125: error: no matching function for call to 'QString::arg(Student&)' ui->textEdit->setText(QString("%1 %2 %3").arg(stu1).arg(stu2).arg(stu3)); ^
时间: 2024-04-06 09:31:56 浏览: 130
这是一个编译错误,错误提示是没有找到匹配的函数来处理 `QString::arg(Student&)`。可能的原因是 `Student` 类型没有实现相应的转换函数或者 `QString::arg()` 函数没有重载对应的参数类型。
你可以检查一下 `Student` 类型是否定义了相应的转换函数,例如 `operator QString() const`。如果没有定义,你可以手动实现一个这样的函数来将 `Student` 类型转换为 `QString` 类型。
另外,你也可以尝试使用 `QString::number()` 或者 `QStringLiteral()` 等函数来将 `Student` 类型转换为 `QString` 类型,具体使用方法可以查看 Qt 官方文档。
相关问题
D:\armtest\serial\mainwindow.cpp:104: error: no matching function for call to 'QString::number(QString&)' QString displayString = QString::number(temp) + "掳C"; ^
这是一个编译错误,错误信息显示在第104行,错误原因是`QString::number()`函数的参数列表不匹配。`QString::number()`函数需要一个数值类型的参数,但是你传递了一个`QString`类型的参数。你需要将这个参数转换为数值类型,然后再传递给`QString::number()`函数。
可以尝试使用`QString::toDouble()`函数将`QString`类型的参数转换为`double`类型,然后再将转换后的`double`类型参数传递给`QString::number()`函数。例如:
```
double tempDouble = tempStr.toDouble();
QString displayString = QString::number(tempDouble) + "°C";
```
或者,你可以直接使用`QString::fromUtf8()`函数将`QString`类型的字符串转换为`const char*`类型的字符串,并使用`std::string`库中的`std::stod()`函数将其转换为`double`类型。例如:
```
double tempDouble = std::stod(tempStr.toStdString());
QString displayString = QString::number(tempDouble) + "°C";
```
在这两种方法中,我们都将浮点数值转换为`double`类型,然后使用`QString::number()`函数将其转换为字符串,并在字符串的末尾加上单位`°C`。
D:\Users\17574\Documents\sample\tuozhuaiandlianxian\mainwindow.cpp:105: error: no matching function for call to 'QGraphicsLineItem::setLine(QPointF, QPointF)' ..\tuozhuaiandlianxian\mainwindow.cpp: In member function 'virtual QVariant CircuitComponent::itemChange(QGraphicsItem::GraphicsItemChange, const QVariant&)': ..\tuozhuaiandlianxian\mainwindow.cpp:105:32: error: no matching function for call to 'QGraphicsLineItem::setLine(QPointF, QPointF)' 105 | connection->setLine(mapToScene(0, 0), connection->line().p2()); | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这个错误的原因是 `QGraphicsLineItem::setLine()` 函数需要传入两个 `QLineF` 类型的参数,而你传入了两个 `QPointF` 类型的参数。要解决这个错误,你需要创建一个 `QLineF` 对象并将其作为参数传递给 `setLine()` 函数。你可以将代码修改如下:
```cpp
QPointF p1 = mapToScene(0, 0);
QPointF p2 = connection->line().p2();
QLineF line(p1, p2);
connection->setLine(line);
```
这里我们先创建了两个 `QPointF` 对象 `p1` 和 `p2`,然后使用它们创建了一个 `QLineF` 对象 `line`,最后将 `line` 作为参数传递给了 `setLine()` 函数。这样就可以避免编译错误了。
阅读全文