这似乎应该是一件相当简单的事情,但我很难搞清楚如何去做。基本上我只有一个QString对象,它总是一个字符(特别是一个字母)长,我需要将它转换为一个字符串,以将其设置为我的类中的对象。我知道如何使用QString("myTextHere").toStdString.c_str()
使其成为char *,但是需要将值设置为的对象不是char *,它是char。有没有办法做到这一点?谢谢!
答案 0 :(得分:3)
我很确定我找到了一种方法来转换值而不会得到关于QCharRef的错误,我发现如果我使用QString::at()
函数来获取第一个索引而不是QString("myText")[0]
,然后在该值上使用toAscii()
,它似乎工作并产生我想要的正确值。换句话说,这就是我所做的:
char c = QString("A").at(0).toAscii();
答案 1 :(得分:2)
使用索引运算符获取字符串的第一个字符:
QString("myTextHere").toStdString()[0]
但是,无需转换为std::string
,因此以下是更好的主意:
主要问题是QString
是UTF-16,包含QChar
个双字节字符。如果您的角色可以使用latin-1字符集表示,则应使用
char ch = QString("myTextHere")[0].latin1();
否则你需要一个更大的类型(注意:即使这会将非BMP字符减少一半):
int i = QString("myTextHere")[0].unicode();
答案 2 :(得分:2)
如果您声明这会返回char *:
QString("myTextHere").toStdString.c_str();
然后显然,这将获得第一个字符,即char
:
QString("myTextHere").toStdString.c_str()[0];
它可能看起来不漂亮,并且可能有更好的方法来获取第一个字符,但根据定义,此代码应该(可能必须)工作。
答案 3 :(得分:1)
像其他人所说的那样,使用QString :: operator []。在QString上使用它将返回一个QCharRef,一个等同于QChar的辅助类。由于QChar旨在支持unicode字符,因此只有一个进一步的规范。来自QChar的qt文档(4.7):
QChar提供了易于使用的构造函数和强制转换操作符 转换为传统的8位字符。如果你定义了 QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII,如下所述 QString文档,您需要显式调用fromAscii()或 fromLatin1(),或使用QLatin1Char,从8位构造QChar char,你需要调用ascii()或toLatin1()来获取 8位值返回。
我的Qt版本不允许
char c = QString("myTextHere")[0];
而我会使用
char c = QString("myTextHere")[0].toAscii();
答案 4 :(得分:0)
如果您遇到错误,这对我有用
错误:必须调用对非静态成员函数的引用;你是否 是要无参数地调用它?
QString mystr = "mystring";
char myvar = mystr.toStdString().c_str()[0];