如何连接QString?

23

我在Qt中打印方面遇到了问题。

我有一个包含HTML代码的QString变量,我想在这段代码中插入来自数据库的数据。

我收到了一个错误:

E:\apprendreQt\gestionstock6\vente.cpp:117: error: invalid operands of types 
  'const char*' and 'const char [27]' to binary 'operator+'

我该如何修复这个问题?

这是我的代码:

int num_bl = ui->numeroBLlineEdit->text().toInt() ;
QString html;
QString requette = "select num_facture,date,nom,prenom,code_fiscale,designation,qte_out, prix,(qte_out * prix ) as Montant, sum(qte_out * prix) as Total from ventes join produits_en_ventes join clients  join produits on ventes.vente_id = produits_en_ventes.vente_id and ventes.client_id = clients.client_id and produits_en_ventes.produit_id = produits.produit_id where ventes.client_id = :client_id ";

if(!m_db->isOpen())
    QMessageBox::critical(this,tr("Inventoria Solution"),m_db->lastError().text()) ;
else{
    m_query->clear();
    m_query->prepare(requette);
    m_query->bindValue(":client_id ", num_bl);

    if(!m_query->exec())
        QMessageBox::critical(this,tr("Inventoria Solution"),m_query->lastError().text()) ;
    else{
        html += "       <table>"
                "<thead>"
                "<tr>"
                "<th>N°</th>"
                "<th>Désignation</th>"
                "<th>Qte</th>"
                "<th>Prix Unitaire</th>"
                "<th>Montant</th>"
                "   </tr>"
                "</thead>";
        while(m_query->next())
        {
            int num_article = 1;

            html += "<tr> <td>" + num_article + "</td> <td>"+m_query->value(5).toString()+"</td> <td>"+m_query->value(6).toInt() + "</td> <td>"+m_query->value(7).toInt() + "</td> <td>" + m_query->value(8).toInt() + "</td></tr>";
            num_article++;

        }
            html += "<tfoot>"
                "<tr>"
                "<td>Total:"+ m_query->value(9).toInt()+"</td>"
                "</tr>"
                "</tfoot>"
                "</table>";
    }
    print_Html(html);


}

可能是重复的问题:如何将一个整数与两个QString连接起来? 这个问题也已经被标记为重复:http://stackoverflow.com/questions/11223674/concatenate-stl-stringintintint-in-qstring - László Papp
3个回答

29

我不确定你的错误。但是据我所知,QString不能直接与int进行拼接。

int myInt = 0;
QString text = "someString" + myInt; // WRONG

int myInt = 0;
QString text = "someString" + QString::number( myInt ); // CORRECT
或者
int myInt = 0;
QString text = "someString" % QString::number( myInt ); // CORRECT

16

如果您使用operator+,则需要提供QString作为参数,但您却使用了整数值:html += "<tr> <td>" + num_article,其中num_article被声明为整数。例如,您可以将其替换为:QString::number(num_article)。在此行中也是如此:

"<td>Total:"+ m_query->value(9).toInt()+"</td>"

应该被替换为

"<td>Total:"+ m_query->value(9).toString()+"</td>"

4
在Qt5中,您可以使用 QStringLiteral 来处理不需要本地化的每个字符串,以将所有字符串文字从 const char * (C ++默认)转换为QString,这也将使得创建这些 QStrings 更加便宜(在支持它的编译器上)。
对于Qt4,您可以使用 QString(const char *)构造函数或 QString :: fromAscii(const char *)静态函数。

你可以使用QString(const char*)构造函数或QString::fromAscii(const char*)静态函数。 - ratchet freak
这就是为什么我认为你的建议不好...与其他解决方案相比,你需要在两个主要变体之间进行移植工作...至少,让人们清楚地知道这是一个有限的解决方案(仅适用于Qt 5)会更好。 - László Papp
@LaszloPapp 添加了版本信息。 - ratchet freak
好的,谢谢,但我认为整个线程应该被关闭,因为这是一个相当基本的问题,并且已经有两次以大致相同的方式回答了。也许你可以在那里发布Qt 5的功能,而不是在这里。 - László Papp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接