【问题标题】:Conflict type QString and std::string in a parameter参数中的冲突类型 QString 和 std::string
【发布时间】:2014-07-23 15:17:43
【问题描述】:

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

我有这个结构:

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 并告诉我我输入了参数 a std::string& ,我不明白为什么类型不匹配,有什么区别,毕竟这是一个简单的字符串。

谢谢。

【问题讨论】:

标签: c++ qt structure


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您应该通过以下方式将std::string 转换为QString

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

    或者

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

    【讨论】:

      【解决方案3】:

      试试:

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

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

      【讨论】:

        【解决方案4】:

        只需在您的std::string 上使用c._str(),它将适用于任何需要QString 的东西

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-02
          • 2012-06-26
          • 2021-06-10
          • 2013-08-21
          相关资源
          最近更新 更多