我有此代码段:
QString nomEntr, prenomEntr, numEntr, ramqEntr, jourEntr, moisEntr, anEntr, sexeEntr;
// ...
std::string nomEntrStr = nomEntr.toLocal8Bit().constData();
std::string prenomEntrStr = prenomEntr.toLocal8Bit().constData();
std::string ramqEntrStr = ramqEntr.toLocal8Bit().constData();
std::string numEntrStr = numEntr.toLocal8Bit().constData();
std::string sexeEntrStr = sexeEntr.toLocal8Bit().constData();
dates.push_back( util::Date(jourEntrlong, moisEntrlong, anEntrlong));
Entraineurs.push_back(hockey::Entraineur(nomEntrStr, prenomEntrStr, dates.back(),
numEntrStr, ramqEntrStr, sexeEntrStr));
事实是,传递给sexeEntrStr
的最后一个参数hockey::Entraineur
必须是char
。因此,我必须将其从QString
转换为char
或将QString
转换为std::string
,然后将其转换为char
。
老实说,我都不知道该怎么做。因此,如果有人可以帮助我解决此问题,我将不胜感激。
来自QString
:
您可以从QChar
的下标运算符QString
或[]
方法中获取at()
,然后调用QChar::toLatin1()以获取char
。
示例:
const QString s { "text" };
const char c = s.at(0).toLatin1(); // get first character `t`
来自std::string
:
您可以从std::string
方法中获得QString::toStdString(),然后使用std::string
的下标运算符[]
或at()
方法来获得char
。
示例:
const std::string str = s.toStdString();
const char chr = str.at(0);
请记住,at()
方法执行边界检查,并且在QString::at()
的情况下,访问越界索引将导致异常或运行时断言。而下标运算符[]
不执行边界检查;并且,访问无效的索引将导致Undefined Behavior。