• 6826阅读
  • 13回复

Windows XP + QT4 如何把QString转成string?有没有谁知道? [复制链接]

上一主题 下一主题
离线donixli1314
 

只看楼主 倒序阅读 楼主  发表于: 2009-08-20
如题!
我用过toStdString ()函数,但转换后结果不正确.
离线zhangyujin78
只看该作者 1楼 发表于: 2009-08-20
其实就是这么转化的。。。 QT3中怎么把Qstring 转换为string。。。?
离线xiongyu

只看该作者 2楼 发表于: 2009-08-20
为自己而已努力吧... 我的博客 http://xycode.org
离线sandiego
只看该作者 3楼 发表于: 2009-08-20
std::string str = QString::toStdString();
离线donixli1314

只看该作者 4楼 发表于: 2009-08-20
谢谢各位的回答
dll里的函数:
void WINAPI TestParam (const string& name, const string& psword)
{
  if (0 == name.compare ("Adams") && 0 == psword.compare ("111111"))
  {
    printf ("input correct!\n");
  }
  else
  {
    printf ("input incorrect!\n Please input again.\n");
  }
}

我做的转换如下:
//我的参数:用户名和密码都保证是英文的
typedef void (WINAPI *Test_API) (const std::string& nn, const std::string& pp);
..................
Test_API     test_api = ...........;

QString name ("Adams");
QString psWd ("111111");

1
std::string  uName  = name.toStdString ();
std::string  uPswod = psWd.toStdString ();

//  std::string uName ((const char*) name.toLatin1 ().data ());
//  std::string uPswod ((const char*) psWd.toLatin1 ().data ());

//  std::string uName  = (const char*) name.toLatin1 ().data ();
//  std::string uPswod = (const char*) psWd.toLatin1 ().data ();

//  std::string uName (name.toLatin1 ().data ());
//  std::string uPswod (psWd.toLatin1 ().data ());

//  std::string uName  = name.toLatin1 ().data ();
//  std::string uPswod = psWd.toLatin1 ().data ();

//  std::string uName  = name.toUtf8 ().data ();
//  std::string uPswod = psWd.toUtf8 ().data ();

//  std::string uName (name.toUtf8 ().data ());
//  std::string uPswod (psWd.toUtf8 ().data ());

//  std::string uName (name.toLocal8Bit ().data ());
//  std::string uPswod (psWd.toLocal8Bit ().data ());

//  std::string uName  = (const char*) name.toLocal8Bit ().data ();
//  std::string uPswod = (const char*) psWd.toLocal8Bit ().data ();
以上都是我做的测试

test_api (uName , uPswod)的调用输出结果是 input incorrect! Please input again
离线donixli1314

只看该作者 5楼 发表于: 2009-08-20
有没有谁知道是为什么呢?
网上提到的方法我试了差不多了,
但调用输出的结果就是不对!
这是为什么啊!
离线hiti_tony
只看该作者 6楼 发表于: 2009-08-20
你直接把转换得到string的printf出来就知道转换的对不对了
离线donixli1314

只看该作者 7楼 发表于: 2009-08-20
printf不可以输出 string的对象吧
离线rqzrqh

只看该作者 8楼 发表于: 2009-08-20
printf("%s",string.c_str());
离线donixli1314

只看该作者 9楼 发表于: 2009-08-20
打印出来都是正确的
但调用test_api (uName , uPswod)就不是正确的
离线donixli1314

只看该作者 10楼 发表于: 2009-08-20
dll里的函数
void WINAPI TestParam (const string& name, const string& psword)
{
    printf ("name = %s\n", name.c_str ());
    printf ("psword= %s\n", psword.c_str ());
}

奶奶的
打印出来的是乱码!
离线rqzrqh

只看该作者 11楼 发表于: 2009-08-20
先进行编码转换,在转变为string类型
离线tudousi
只看该作者 12楼 发表于: 2009-08-20
比如 QString text.toLocal8Bit().data() ,就可把Qstring 类型转成char*类型,直接赋值给string 类型的变量即可
离线donixli1314

只看该作者 13楼 发表于: 2009-08-21
QString name ("Adams");
QString psWd ("111111");

std::string  uName  = name.toStdString ();
std::string  uPswod = psWd.toStdString ();

//  std::string uName ((const char*) name.toLatin1 ().data ());
//  std::string uPswod ((const char*) psWd.toLatin1 ().data ());

//  std::string uName  = (const char*) name.toLatin1 ().data ();
//  std::string uPswod = (const char*) psWd.toLatin1 ().data ();

//  std::string uName (name.toLatin1 ().data ());
//  std::string uPswod (psWd.toLatin1 ().data ());

//  std::string uName  = name.toLatin1 ().data ();
//  std::string uPswod = psWd.toLatin1 ().data ();

//  std::string uName  = name.toUtf8 ().data ();
//  std::string uPswod = psWd.toUtf8 ().data ();

//  std::string uName (name.toUtf8 ().data ());
//  std::string uPswod (psWd.toUtf8 ().data ());

//  std::string uName (name.toLocal8Bit ().data ());
//  std::string uPswod (psWd.toLocal8Bit ().data ());

//  std::string uName  = (const char*) name.toLocal8Bit ().data ();
//  std::string uPswod = (const char*) psWd.toLocal8Bit ().data ();
上面这些类型我都试过
在传递给dll里的函数前调用
printf ("uName  = %s\n", uName  .c_str ());
printf ("uPswod = %s\n", uPswod .c_str ());
这两个打印出来的是正确的
但是传递给dll里的函数
void WINAPI TestParam (const string& name, const string& psword)
{
    printf ("name = %s\n", name.c_str ());
    printf ("psword= %s\n", psword.c_str ());
}
打印出来的就是乱码,
也不知道是什么原因
快速回复
限100 字节
 
上一个 下一个