Qt - 如何将QString转换为char(NOT char *)

时间:2014-06-26 20:36:34

标签: c++ qt type-conversion

这似乎应该是一件相当简单的事情,但我很难搞清楚如何去做。基本上我只有一个QString对象,它总是一个字符(特别是一个字母)长,我需要将它转换为一个字符串,以将其设置为我的类中的对象。我知道如何使用QString("myTextHere").toStdString.c_str()使其成为char *,但是需要将值设置为的对象不是char *,它是char。有没有办法做到这一点?谢谢!

5 个答案:

答案 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];