我正在尝试制作一个显示我名字的简单对话框。看看代码。
Pessoa *p = new Pessoa("Ronald Araújo", "ronald.araujo@live.com", 23);
QMessageBox msg; msg.setText(QString::fromUtf8(p->getNome()));
msg.exec();
但是代码在setText()行中断,出现以下错误:
error: no matching function for call to 'QString::fromUtf8(std::string)'
msg.setText(QString::fromUtf8(p->getNome));
记住,当我举例msg.setText(QString::fromUtf8("Hi World"))
时,代码正常运行。
返回名称的实现:
string Pessoa::getNome(){ return this->nome; }
答案 0 :(得分:1)
QString
无法直接从std::string
构建。您有两种选择我可以立即想到:
要么改变
string Pessoa::getNome(){ return this->nome; }
到
QString Pessoa::getNome(){ return this->nome; }
或更改
QMessageBox msg;
msg.setText(QString::fromUtf8(p->getNome()));
msg.exec();
到
QMessageBox msg;
msg.setText(QString::fromUtf8(QString::fromStdString(p->getNome())));
msg.exec();
答案 1 :(得分:0)
查看QString::fromUtf8()
的文档:
QString QString::fromUtf8( const char * str, int size = -1 )
它不需要std::string
作为其第一个参数。您可以使用QString::fromStdString()
QString QString::fromStdString( const std::string & str )
确实需要std::string
,或更改您的代码以提供字符串的char array
:
msg.setText( QString::fromUtf8( p->getNome().c_str() ) );