参数中的冲突类型QString和std :: string

时间:2014-06-03 10:18:15

标签: c++ qt structure

我认为我的问题很容易解决,但由于我缺乏知识,我无法找到答案。

我有这个结构:

struct variableOutil {
    std::string Nom;   
    float Valeur;   
    std::string Module;    
    std::string Unite;    
    std::string Format;    
    std::string Accesibilite;    
    std::string Description ;
};

问题来自这里:

struct variableOutil ToleranceTensionAvion;
ToleranceTensionAvion.Nom = "ToleranceTensionAvion";
QTableWidgetItem* newItem = new QTableWidgetItem();
newItem->setText(ToleranceTensionAvion.Nom);
this->ui->variableTableWidget->setItem(1,0,newItem);

我发现了这个错误:

No matching function for call to 'QTableWidgetItem::setText(std::string&)

问题是setText需要一个const QString &text并告诉我我输入参数std::string&,我不明白为什么这个类型不匹配,以及什么&毕竟,这是一个简单的字符串。

谢谢。

4 个答案:

答案 0 :(得分:3)

您应该将std::string转换为QString

newItem->setText(QString::fromStdString(ToleranceTensionAvion.Nom));

或者

newItem->setText(QString::fromUtf8(ToleranceTensionAvion.Nom.c_str());

答案 1 :(得分:2)

尝试:

newItem->setText(QString::fromUtf8(ToleranceTensionAvion.Nom.c_str());

QString仅允许使用Unicode。 std::string只存储字节,不适用于编码。存储文本的最佳方式可能是 UTF-8编码

答案 2 :(得分:1)

它们是完全不同的类,std::string不能用来代替QString。您可以从QString构建std::string并传递它。

QString s =QString::fromStdString(ToleranceTensionAvion.Nom);
newItem->setText(s);

答案 3 :(得分:1)

只需在c._str()上使用std::string,它就可以用于任何需要QString

的内容