将For循环的i转换为QString
Convert i of For Loop to QString
已编辑-
这就是我被抛弃的地方:
for(int i=0, a=bugModel->rowCount(); i<a; i++){
qDebug() << i;
QString *BugName = new QString(QString::number(i));
setting.beginGroup(BugName->toAscii());
bugModel->setData(bugModel->index(i,0), setting.value("theBugName", "A Bug!").toString());
setting.endGroup();
delete BugName;
}
我正试图从设置组中加载一个名称,并将其设置为列表模型,该名称将等于I。但每次加载模型时,组"0"的信息都只显示出来,因为我在这里是0。例如:
我有两个名为"0"answers"1"的设置组。我希望for循环运行2次,这样它就可以从这些组中加载值,并在QListView中进行设置。但我对它进行了测试,每次它只加载"0"组的值,当我将其更改为for(int i=1..)
时,它加载组"1"的值。
要修复第一种情况,您可以使用(*BugName) = QString::number(i)
或BugName->setNum(i);
,但更大的问题是您试图实现什么,以及如何检查它是否保持为零?你希望改变什么?也许可以提供更多的上下文?
基于"a"的奇怪用法,我猜还有很多其他代码你没有发布。现在,循环等价于for (int i = 0; i < 2; ++i)
,因此只在i=0和i=1之间迭代。在第一次传递时,它创建一个新的QString,将地址分配给错误名称指针,然后尝试(错误地)将字符串分配给它。您可以将第二行更改为*BugName = QString::number(i);
,它应该可以工作。更好的是,您可以使用其中一个QString构造函数,将第一行更改为QString* BugName = new QString(QString::number(i))
,并完全消除第二行。
现在是第二个问题,内存泄漏。在第一次传递之后,循环重置并创建第二个qstring,用新地址覆盖bugname。不幸的是,这孤立了您创建的第一个导致泄漏的qstring。在要修复的循环结束之前添加行delete BugName;
。如果您实际上试图创建一个"BugNames"数组以在循环之后使用,那么您可能需要使用一个数组:将QString BugNames[2]
放在循环之前,然后使用循环迭代并通过BugNames[i] = QString::number[i]
单独初始化它们。由于数组是自动变量,因此在后一种情况下不需要delete
部分。
编辑查看您修改后的代码,我会这样做(尽管旧方法仍然有效):
for(int i=0; i < bugModel->rowCount(); i++){
qDebug() << i;
QString BugName = QString::number(i);
setting.beginGroup(BugName.toAscii());
bugModel->setData(bugModel->index(i,0), setting.value("theBugName", "A Bug!").toString());
setting.endGroup();
}
请注意,您对"a"的使用是多余的,因为它(实际上是循环本身)可能会被编译器删除。现在我知道你在做什么了,我会完全放弃指针字符串,只使用一个自动变量。至于它不工作的问题,qDebug应该输出"0 1",是吗?您可以在分配::number
之后尝试qDebug() << BugName;
,但我怀疑它也会输出"0 1"。这意味着真正的问题在begin/endGroup()
函数中,而不是在这个循环中。如果beginGroup
的参数被分配给了静态的东西,那么您可能会用第二次传递覆盖一个值
- 将 Qvector<uint8_t> 转换为 QString
- 将 hh:mm:ss.zzz 时间 QString 转换为毫秒的单行函数?
- 如何将包含指数的 QString 转换为C++中的双倍?
- 删除unicode def后,无法将QString转换为TCHAR
- 如何将QBytearrayBCD转换为十进制QString表示
- 在Qt中将QString转换为ASCII值,反之亦然
- 如何在Windows上将Qt QString转换为LPCTSTR
- 在不损失阿尔法值的情况下将 QColor 转换为 QString
- 如何阻止反斜杠在从 QString 到 char 数组的转换中取消?
- 将 QString 转换为 QJsonArray
- QByteArray 和 QString 转换的问题
- QT中不允许使用一行多个转换,例如qString到char*
- q致命参数:将 QString 转换为常量字符* 会导致警告"format string is not a string literal"
- 我可以使用模板在 QString 和 std::string 之间进行自动转换吗?
- 将QString转换为uintptr_t,qt / c
- 如何将QByteArray转换为QString?
- 无法将 QString 转换为 Const Char*
- 错误:请求从“ void”转换为“ QString”的非量表类型
- 如何将STD :: String转换为QString保留值,反之亦然
- 从文件中的字符串转换 QString